如何在python中为函数参数赋值

时间:2018-06-01 09:22:13

标签: python

我想在函数内部初始化一个变量(以便我的示例中的最终print语句输出10):

def init_param(param):
    param = 10

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

这在python中可行吗?

4 个答案:

答案 0 :(得分:1)

参数在函数内部分配为局部变量。因此,所有原则都适用于此。

  • 无法更改不可变对象。
  • 可以修改可变对象。

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

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   

答案 1 :(得分:1)

首先,python函数按对象传递值,此处的引用名称param只是对n保持的值的引用。

现在找到解决方案,是的,只要您传递变量名称

就可以
def init_param(var_name):
    globals()[var_name] = 10

n = 1
init_param('n')
print n

希望它会回答!

答案 2 :(得分:1)

简短回答:不,你不能。

更长的答案:

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上面链接的文章)

答案 3 :(得分:0)

def init_param(param):
    param = 10

n = 1
init_param(n)
print n 

此处n是一个整数(immutable data type),因此它将按值传递,因此n的值将保持不变。

让我们取一个mutable data type(例如列表)然后它将被引用传递,因此列表中的值将被更改。

def init_param(a):
    a[0] = 10

arr = [1] 
init_param(arr)
print(arr[0]) # print 10

所以你必须首先检查数据是可变的还是不可变的。

否则您可以使用global keyword访问global variables

def f():
    global n
    n = 10
n = 1
f()
print(n) # print 10