如何在Python中为函数参数分配值

2024-04-20 11:56:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在函数中初始化一个变量(这样我的示例中的最终print语句将输出10):

def init_param(param):
    param = 10

n = 1
init_param(n)
print n                   # prints 1

这在python中可行吗?你知道吗


Tags: 函数示例paraminitdef语句printsprint
3条回答

参数在函数内部作为局部变量赋值。所以所有的原则都适用于这里。你知道吗

  • 不能更改不可变对象。你知道吗
  • 可变对象可以就地修改。你知道吗

您正在缩进以修改不可变对象,这是不可能的。所以你唯一的选择是:-

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

名称paraminit_param函数的本地名称。重新绑定此名称将更改绑定到函数本地作用域中的名称param的值,但对调用方作用域中的名称n没有任何影响-这些名称位于完全不同的名称空间中。您可以read Ned Batcheler's reference article on Python's names and binding获得更深入的解释。你知道吗

工作方法是使用可变容器(例如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

希望它能回答!你知道吗

相关问题 更多 >