Python中默认参数的范围

unc*_*ive 5 python parameters scope parameter-passing default-parameters

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

i = 5

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

i = 6
f()
Run Code Online (Sandbox Code Playgroud)

来自c ++,直觉对我来说这将打印5.但我也想理解技术解释:"默认值在定义范围内的函数定义点进行评估." "定义范围"在这里意味着什么?

And*_*zlo 1

1. i = 5
2. 
3. def f(arg=i):
4.     print(arg)
5. 
6. i = 6
7. f()
Run Code Online (Sandbox Code Playgroud)

在 #1 处,i = 5对变量进行求值,并将变量及其值添加到作用域中。

在第 3 行,对函数声明进行求值。此时,所有默认参数也会被评估。i保存值5,因此arg的默认值是5(而不是符号值i)。

i更改第 6 行的值后,arg已经是 5,所以它不会改变。