• 闭包函数


    0.什么叫做闭包

    闭包:内部函数调用外部函数的变量(非全局变量),python把这个情况成为闭包.

    # def func1():
    # 	a = 'Sath'
    # 	def func2():
    # 		print(a)
    # 	return func2
    

      

    1. 闭包的优点

    1.常驻内存
      一个函数运行完之后,python解释器会回收内存,但是当一个函数的内部还有函数,并且这个内部函数引用了外函数
      的变量,那么python会认为这是一个闭包,就会将外函数的变量绑定给内函数,供内函数使用,不会随着外函数的结束
      而销毁这个变量,会留在内存中,也就是常驻内存.

    2.防止其他程序改变这个函数内的变量
      当你的函数调用一个全局变量时,这个全局变量是所有人都可以用的
      不能保证这个变量的唯一性和可信赖性,容易因为变量的问题程序出现bug
      际上就是在全局变量中,留出一块地方供你的程序使用,别人的非法手段进不到你的程序中,也就是开发封闭性

    2.如何判断函数是否为闭包

    # 可以使用"__closure__"来检测函数是否为闭包,返回"cell"就是闭包,返回"None"就不是闭包
    # def func1():
    # 	a = 'Sath'
    # 	def func2():
    # 		print(a)
    # 	print(func2.__closure__)
    # 	return func2
    # func1()
    # 返回值如下
    # (<cell at 0x0000000002177588: str object at 0x0000000002807260>,)
    

      

    3.当内部函数没有调用外部函数的变量时就不是闭包 

    # def func1():
    # 	a = 'Sath'
    # 	def func2():
    # 		print(123)
    # 	print(func2.__closure__)
    # 	return func2
    # func1()
    # 当返回None时证明这不是一个闭包
    # None
    

      

    4.如何在函数外部调用内部函数

    def func1():
    	name = 'sath'
    	def inner():
    		print(name)
    	return inner    # 内部函数最为外部函数的返回值
    
    ret = func1()       # 就相当于"ret = inner"
    ret()               # 想平常调用函数一样就可以
    # 结果:sath
    

      

  • 相关阅读:
    字符串复习笔记
    构造
    网络流复习笔记
    LCT学习笔记
    省选前的数据结构训练
    在windows安装并启动测试kafka
    Scala 原生操作MySQL
    Scala基础语法
    ORACLE查出表所有的触发器及触发器详细信息
    转载二,JAVA面试题
  • 原文地址:https://www.cnblogs.com/594504110python/p/9326162.html
Copyright © 2020-2023  润新知