Python 中默认参数的范围

Scope for default parameter in Python

我正在学习 Python 并且遇到了一个我不太理解的例子。官方教程中给出了如下代码:

i = 5

def f(arg=i):
    print(arg)

i = 6
f()

来自 c++,这将打印 5 对我来说直觉上是有意义的。但我也想了解技术解释:"The default values are evaluated at the point of function definition in the defining scope."这里的 "defining scope" 是什么意思?

1. i = 5
2. 
3. def f(arg=i):
4.     print(arg)
5. 
6. i = 6
7. f()

在 #1,i = 5 被求值,变量及其值被添加到范围。

在第 3 行,计算函数声明。此时所有默认参数也被计算。 i 包含值 5,因此 arg 的默认值为 5(而不是符号 i)。

i 更改第 6 行的值后,arg 已经是 5,因此不会更改。