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上发现的一个随机代码块,我不会使用它,只是好奇而已。