Python - 嵌套函数中的位置参数

问题描述 投票:0回答:1

此问题与此视频相关: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()
python-3.x scope nested-function
1个回答
0
投票

所以基本上当你运行 level_ Five(0) 时,它会返回一个函数并将其存储在 f 中。我们尚未运行该函数,因此无需将任何参数 (y) 传递给函数(内部)。存储在 f 中的函数的行为类似于..

def f(y):

   return 0 , y , "outer z 0"

然后你可以像在 print 语句中那样简单地运行 f

© www.soinside.com 2019 - 2024. All rights reserved.