马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 的好处
当然,如果在一些特殊的情况,还是第一种写法比较好~~~
本人才疏学浅,如果有纰漏,请在评论区指出! |