闭包浅谈

如需转发,请注明出处:小婷儿的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/

csdnhttps://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正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

重要的事多做几遍。。。。。。

 

wps75BC.tmp 

posted @ 2019-01-13 18:29  小婷儿  阅读(364)  评论(0编辑  收藏  举报
levels of contents