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