2024-04-20 11:56:22 发布
网友
我想在函数中初始化一个变量(这样我的示例中的最终print语句将输出10):
def init_param(param): param = 10 n = 1 init_param(n) print n # prints 1
这在python中可行吗?你知道吗
参数在函数内部作为局部变量赋值。所以所有的原则都适用于这里。你知道吗
您正在缩进以修改不可变对象,这是不可能的。所以你唯一的选择是:-
def init_param(param): param = 10 return param n = 1 n = init_param(n) print n
这是非常无用的或
def init_param(param): param[0] = 10 n = [1] init_param(n) print n
简而言之:不,你不能
回答:在
def init_param(param): param = 10
名称param是init_param函数的本地名称。重新绑定此名称将更改绑定到函数本地作用域中的名称param的值,但对调用方作用域中的名称n没有任何影响-这些名称位于完全不同的名称空间中。您可以read Ned Batcheler's reference article on Python's names and binding获得更深入的解释。你知道吗
param
init_param
n
工作方法是使用可变容器(例如dict)并对该容器进行变异,即:
dict
def init_param(params, name, value): params[name] = value params = { "n": 1, "answer": 42, "parrot": "dead" } init_params(params, "n", 10) print(params)
(如果你不明白这一条为什么有效,请重新阅读Ned Batcheler的文章)
首先,python函数按对象传递值,这里的引用名param只是对n持有的值的引用。你知道吗
现在谈到解决方案,是的,只要您传递变量名,就有可能
def init_param(var_name): globals()[var_name] = 10 n = 1 init_param('n') print n
希望它能回答!你知道吗
参数在函数内部作为局部变量赋值。所以所有的原则都适用于这里。你知道吗
您正在缩进以修改不可变对象,这是不可能的。所以你唯一的选择是:-
这是非常无用的或
简而言之:不,你不能
回答:在
名称
param
是init_param
函数的本地名称。重新绑定此名称将更改绑定到函数本地作用域中的名称param
的值,但对调用方作用域中的名称n
没有任何影响-这些名称位于完全不同的名称空间中。您可以read Ned Batcheler's reference article on Python's names and binding获得更深入的解释。你知道吗工作方法是使用可变容器(例如
dict
)并对该容器进行变异,即:(如果你不明白这一条为什么有效,请重新阅读Ned Batcheler的文章)
首先,python函数按对象传递值,这里的引用名
param
只是对n
持有的值的引用。你知道吗现在谈到解决方案,是的,只要您传递变量名,就有可能
希望它能回答!你知道吗
相关问题 更多 >
编程相关推荐