|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 qiuyouzhi 于 2020-3-4 12:04 编辑
Python FAQ 005
问题:
闭包没听太懂,课后习题中有两题:
1、
- def funOut():
- def funIn():
- print("……")
- return funIn()
复制代码
2、
- def funOut():
- def funIn():
- print("……")
- return funIn
复制代码
这两题最后一行,这个返回的,有括号和没括号有什么区别?
(原文: https://fishc.com.cn/forum.php?m ... =Python%B1%D5%B0%FC)
解答:
有括号是返回这个函数,没有括号是返回这个函数对象
如果返回的是函数,那么调用外部的函数就必定会调用内部的函数
举个代码例子:
- def funX(x):
- print(x)
- def funY(y):
- x *= y
- return x
- return funY(5)
- print(funX(5))
复制代码
运行这段代码后,一定会打印出25
但是,如果稍微改一改:
- def funX(x):
- print(x)
- def funY(y):
- nonlocal x
- x *= y
- return x
- return funY
- a = funX(5)
- print(a(50))
- print(a(25))
复制代码
这时我们发现,funY 的参数可以在外部变动了!
而这就是 funY 的好处
当然,如果在一些特殊的情况,还是第一种写法比较好~~~
本人才疏学浅,如果有纰漏,请在评论区指出! |
|