闭包浅谈
如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10263546.html
欢迎关注小婷儿的博客:
有问题请在博客下留言或加作者微信:tinghai87605025 或 QQ :87605025
python QQ交流群:py_data 483766429
闭包
一、概念
内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure);即,闭包是两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定要有参数。
1 def 外部函数(参数): 2 3 def 内部函数(): 4 5 pass 6 7 return 内部函数
二、闭包与正常函数的区别:
l 闭包格式是两个函数的嵌套;
l 闭包外部函数的参数可以在内存中保持;
l 闭包函数就如同一个“类”,只有在该闭包函数里的方法才可以使用其局部变量,闭包函数之外的方法是不能读取其局部变量的。这就实现了面向对象的封装性,更安全更可靠,即闭包里面的数据是独有的数据,与外界无影响;
l 函数:函数中,需要使用的全局变量,在一定程度上是受到限制的,因为全局变量不仅仅是一个函数使用,其他的函数也可能会使用到,一旦修改会影响到其他函数使用全局变量,所以全局变量不能随便修改从而在函数的使用中受到一定局限性。
三、练习
例一、求和
1 def func_out(*args): #定义内内部函数 2 def func_in(): #使用外部函数的args变量 3 sumV = sum(args) 4 return sumV #返回内部函数 5 return func_in 6 7 S = func_out(1, 2, 3, 2) 8 print(S()) #真正调用的是func_in函数
结果:
8
例二、判断成绩是否合格
1 def pass_out(scoreLine): 2 def true_score(score): 3 if score >= scoreLine: 4 print('合格') 5 else: 6 print('不合格') 7 return true_score 8 total_score_100 = pass_out(60) 9 total_score_150 = pass_out(90) 10 total_score_100(90) 11 total_score_150(60)
结果:
合格
不合格
例三、申明变量
1 def func_outer(numb): 2 def func_inner(): 3 # nonlocal是闭包内部变量的声明:声明变量不是局部变量,这样下方的代码可以对外部函数传入的变量进行修改 4 nonlocal numb 5 numb += 1 6 return numb 7 8 return func_inner 9 10 11 ret = func_outer(66) # 得到内部函数inner的指向 12 print(ret()) # 调用inner函数,并打印inner函数的返回值 结果为67
结果:
67
欢迎关注小婷儿的博客:
博客园:http://www.cnblogs.com/xxtalhr/
csdn:https://blog.csdn.net/u010986753
有问题请在博客下留言或加作者微信:tinghai87605025 或 QQ :87605025
python QQ交流群:py_data 483766429
OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA
OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA
小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。
重要的事多做几遍。。。。。。
文章内容来源于小婷儿的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解 有趣的事,Python永远不会缺席!
如需转发,请注明出处:小婷儿的博客python https://www.cnblogs.com/xxtalhr/
博客园:https://www.cnblogs.com/xxtalhr/
CSDN:https://blog.csdn.net/u010986753
有问题请在博客下留言或加作者:
微信:tinghai87605025
QQ :87605025
python QQ交流群:py_data 483766429
培训说明:
OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA
OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA
小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。重要的事多说几遍。。。。。。