2417944015 发表于 2020-8-22 10:38:12

Python闭包问题

def one(x):
    def two(y):
      return x*y
    return two
temp=one(4)
print(temp(5))


可以打印出20,但原理想不明白,哪位大佬能仔细讲讲运作过程吗

Twilight6 发表于 2020-8-22 10:45:07

本帖最后由 Twilight6 于 2020-8-22 10:48 编辑



这里的 temp=one(4) 相当于 one 参数中的 x = 4 了,传入后的参数可以看成这样:
def one(4):
    def two(y):
      return 4*y
    return two
因为 one 函数调用后返回的是 two 函数,所以代码可以看成这样了:
def two(y):
    return 4*y
此时的 temp = one(4) 也就等于这里的two 即 temp = two

然后你再次调用 temp(5) ,而 temp(5) 也就相当于将相当于 two(5),所以此时结果就是4*5 返回 20

你也可以去看看这个例子,应该有助于你的理解:

https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=172822&pid=4777716

2417944015 发表于 2020-8-22 10:47:20

Twilight6 发表于 2020-8-22 10:45
看看这个例子,应该有助于你的理解:

https://fishc.com.cn/forum.php?mod=redirect&goto=findpost& ...

thanks

sbx 发表于 2020-8-22 13:33:57

感谢分享
页: [1]
查看完整版本: Python闭包问题