此问题与此视频相关:https://www.youtube.com/watch?v=jXugs4B3lwU
我缺少的部分比视频整体涵盖的概念要简单一些。在下面的示例代码中: 为什么内部函数 (inner()) 会获取 f 和 g 函数调用中传递的参数值? (即f(“y arg”),g(“其他y arg”))
在未经训练的人看来,level_ Five 函数仅定义了一个参数(“n”),该参数在 level_ Five 函数定义下对“z”的变量赋值中引用。外部(level_ Five)函数定义中定义的名为“y”的参数绝不会传递给inner()......那么当外部函数调用时,inner()如何隐式拾取传递的值作为y参数正在被呼叫吗?
我觉得这是因为当函数分配给 f 或 g 时,第一个位置参数已经被定义(即当 f 或 g 被调用时,该值转到 level_ Five 的参数“n”),然后提供给 f 的参数或 g 当它们被调用时,会以某种方式神秘地被用作第二个位置参数,就好像 level_ Five 定义中有一个隐式 *args 一样,因此正在进入 inner() ......我已经设法我自己都搞不清楚这是怎么发生的,有人能澄清一下吗?
x = "global x"
def level_five(n):
z = f"outer z {n}"
def inner(y):
return x, y, z
return inner
def main():
f = level_five(0)
g = level_five(1)
print(f("y arg"), g("other y arg"))
main()
所以基本上当你运行 level_ Five(0) 时,它会返回一个函数并将其存储在 f 中。我们尚未运行该函数,因此无需将任何参数 (y) 传递给函数(内部)。存储在 f 中的函数的行为类似于..
def f(y):
return 0 , y , "outer z 0"
然后你可以像在 print 语句中那样简单地运行 f