提问人:MPP 提问时间:4/15/2023 更新时间:4/15/2023 访问量:23
带有嵌套函数和函数参数的程序输出
Program output with nested function and function parameter
问:
给定以下代码
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。谁能解释一下为什么会这样?
答:
0赞
Unmitigated
4/15/2023
#1
调用时,被调用,因为等于 。在这里,它传递了对当前在函数调用中定义的函数的引用,该函数包含对参数值的闭包。因此,此函数将值 视为下次调用 之前的值,因此稍后打印。如果你还添加 inside ,你会看到它等于首先传递给 的函数。alpha(1, gamma)
alpha(2, beta)
num
1
beta
alpha
beta
num
alpha
1
print(proc)
beta
proc
gamma
alpha
评论
0赞
Unmitigated
4/15/2023
有关详细信息,另请参阅 programiz.com/python-programming/closure。
评论