我有下面的代码。
a = 10
def f(x):
return x + a
a = 3
f(1)如果我们打印(F1),结果是4。这里似乎使用了a的第二个赋值(a=3)。有人能给我解释一下不使用第一个赋值(a=10)有什么特殊的原因或规则吗?
谢谢,
迪米特里奥斯
发布于 2021-02-19 04:56:16
每次执行return x + a时都会解析a和x。在调用f之前重新分配a。f知道a不是一个局部变量,所以在它的封闭作用域中查找"a“。"a“中有一个3,这就是我们要用到的。
一般来说,对于f来说,在执行时使用原始赋值是非常糟糕的。这意味着函数不能利用全局变量的变化。它还需要在定义函数之前分配全局变量,这对于动态语言并不是特别有用。
不过,你可以破解它。如果您使用默认值定义了一个参数,则会在定义函数并获得所需内容时对其进行赋值。
a = 10
def f(x, a=a):
return x + a
a = 3
print(f(1))发布于 2021-02-19 04:57:09
你看,在定义 f(x)之前,你已经定义了a。但是您对f(1)的调用是在您将值3赋给"a“之后进行的。
f(x)在被调用时将始终使用"a“的current值,而不是在定义它时。如果您希望f(x)中的"a“为常量值,则应在函数中声明它,如下所示:
def f(x):
a = 10
return x + ahttps://stackoverflow.com/questions/66268016
复制相似问题