day14 闭包

闭包的概念
  必须要有函数嵌套,内部函数调用外部函数的变量
简单的例子
  此种方法会导致每次使用内部函数inner的时候需要不断的调用外部函数。
  结果导致外部函数的变量不断的被调用被释放,比较低效,相当于本来一个函数你现在用起来需要用到两个函数。
1 def  outer():
2     a = 1
3     def inner():
4         print(a)
5     inner()
6     print(inner.__closure__)  # 输出有cell 表示为闭包,为None不是闭包
7 outer()        # (<cell at 0x0000000000150108: int object at 0x000007FEE62BD420>,)
常用的闭包用返回值完成

  通过返回值拿到内部函数的地址,然后赋值直接运行即可直接运行内部函数
  从而让内部函数调用的变量可以长久保存,而不至于每次使用创建结束释放这样低效的行为
1 def  outer():
2     a = 1
3     def inner():
4         print(a)
5     return inner
6 inn = outer()
7 inn()
8 print(inn.__closure__)    # (<cell at 0x0000000000340108: int object at 0x000007FEE0DFD420>,)



猜你喜欢

转载自www.cnblogs.com/shijieli/p/9705653.html