为什么第一代码输出51和第二代码输出21。我理解第二个代码应该输出21,但是按照我的理解,第一个代码也应该输出21(b的值更改为20,然后调用函数f)。我想念什么?
b = 50
def f(a, b=b):
return a + b
b = 20
print(f(1))
输出:51
b = 50
b = 20
def f(a, b=b):
return a + b
print(f(1))
输出:21
编辑:这与How to change default value of optional function parameter in Python 2.7?不同,因为此处讨论的是默认参数发生的意外更改,而不是如何有意地更改默认参数的值,即此处的问题集中在python解释器如何处理位置上。具有默认参数的函数的函数定义。
针对python初学者的提示
def f(a, b=b)
,因为当前范围内的def f(a, b=50)
的值为b
。这样,50
将f(1)
分配给a
,因此1
= 1 + 50 = 51
def f(a, b=b):
NameError: name 'b' is not defined
时,正在将f
的值(当时为b
)分配给函数的第二个参数。