带有嵌套函数和函数参数的程序输出

Program output with nested function and function parameter

提问人:MPP 提问时间:4/15/2023 更新时间:4/15/2023 访问量:23

问:

给定以下代码

def alpha(num, proc):

    def beta(): print(num)

    if num == 1:
        alpha(2, beta)
    else:
        proc()

def gamma():
    pass

alpha(1, gamma)

我期望输出为 2,因为我的逻辑是:

   alpha(1, gamma)
=> alpha(2, beta)  # since num == 1
=> proc()          # since num != 1
=> beta()
=> print(2)        # since beta was a parameter alongside 2

但是,实际输出是 code is 1。谁能解释一下为什么会这样?

python 函数 闭包 嵌套函数

评论


答:

0赞 Unmitigated 4/15/2023 #1

调用时,被调用,因为等于 。在这里,它传递了对当前在函数调用中定义的函数的引用,该函数包含对参数值的闭包。因此,此函数将值 视为下次调用 之前的值,因此稍后打印。如果你还添加 inside ,你会看到它等于首先传递给 的函数。alpha(1, gamma)alpha(2, beta)num1betaalphabetanumalpha1print(proc)betaprocgammaalpha

评论

0赞 Unmitigated 4/15/2023
有关详细信息,另请参阅 programiz.com/python-programming/closure