Python 为什么函数不接受新的赋值?
我偶然发现了一段代码,如下所示:Python 为什么函数不接受新的赋值?,python,function,Python,Function,我偶然发现了一段代码,如下所示: x = 12 def f1(a,b=x): print(a,b) x = 15 f1(4) 记住,我肯定认为答案是4 15,因为f1的调用是在我将x分配给15之后,当我运行它时,我得到了4 12 既然我调用f1时x是15,为什么它不打印出来 编辑 x = 12 def f1(a,b=x): print(x) print(b) print(a,b) x = 15 f1(4) 打印出来 15 12 4 12 因此问题变成了为
x = 12
def f1(a,b=x):
print(a,b)
x = 15
f1(4)
记住,我肯定认为答案是4 15
,因为f1
的调用是在我将x
分配给15
之后,当我运行它时,我得到了4 12
既然我调用f1
时x
是15
,为什么它不打印出来
编辑
x = 12
def f1(a,b=x):
print(x)
print(b)
print(a,b)
x = 15
f1(4)
打印出来
15
12
4 12
因此问题变成了为什么b
没有用新值x
更新?当您执行f1(b=x)
时,b
的默认值现在指向与x
相同的引用。也就是说,现在x
和b
都指12
将引用x
指向的内容更改为以后(15
)不会影响b
指向的内容(仍然是12
)
另请参阅,或许也会有所帮助。Heh@Gabip,我刚刚更新了我的答案,将该链接也包括在内。这样的链接确实有助于澄清混淆。与其期望默认参数在调用函数时根据状态而改变,不如传入新值:
f1(4,x)
。这是一个简单得多的模式。它只是我在Reddit上发现的一个随机代码块,我不会使用它,只是好奇而已。