代码1
i = 5
def f(arg=i): #定义函数时默认参数就已经确定了
print(arg)
i = 6
f()
结果为5
默认值是在 定义过程 中在函数定义处计算的,默认参数一开始就赋值为5 ,也就是arg指向了5的内存地址,而下面将i重新赋值为6.只是使i 的指向改为指向6的内存地址,和arg的指向没关系。所以打印的是5.
如果没有默认值:
代码2
i = 5
def f():
print(i)
i = 6
f() # 结果为6
代码2 中i 首先被赋值为5,后来被赋值为6,调用在后,所以输出的i为6.