【发布时间】:2016-06-20 08:55:02
【问题描述】:
我正在学习 Python,遇到了一个我不太明白的例子。官方教程中给出如下代码:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
来自 c++,这对我来说很直观,这将打印 5。但我也想理解技术解释:“默认值是在定义范围内的函数定义点进行评估的。”这里的“定义范围”是什么意思?
【问题讨论】:
-
“定义范围” 表示定义函数的范围,即包含
i = 5的范围,其中def行被执行。另见:stackoverflow.com/q/1132941/3001761 -
“定义作用域”:在 Python 中,您可以拥有一个局部作用域的函数,即函数中的函数。最接近 C++ 的是 lambda,它在 C++ 中是新的(Python 也有 lambda)。
-
简短回答:默认值以元组形式存储在
f.func_defaults中,其值在您的代码中为(5,)。
标签: python parameters scope parameter-passing default-parameters