• 闭包函数


    # 闭包函数
    '''
    闭包:
    	内函数使用了外函数的局部变量,
    	并且外函数把内函数返回出来的过程是闭包
    	这个内函数叫做闭包函数;
    '''
    # (1) 基本语法
    def outer():
    	a = 5
    	b = 6
    	# inner 是闭包函数
    	def inner():
    		print(a,b)
    	return inner
    res = outer()  # res = inner
    print(res)
    res()          # res() = inner()
    
    # 获取闭包函数使用的变量  __closure__ , cell_contents (了解)
    tup = res.__closure__
    print("<==1==>")
    print(tup)
    # 获取元组里面第一个元素
    obj = tup[0]
    print(obj)
    # 使用cell_contents来获取单元对象当中的值
    res = obj.cell_contents
    print(res)
    
    obj2 = tup[1]
    res2 = obj2.cell_contents
    print(res2)
    print("<==2==>")
    
    # 闭包的特点:
    """
        内函数使用了外函数的局部变量,外函数的局部变量与内函数发生绑定,延长该变量的生命周期
        (实际内存给它存储了这个值,暂时不释放)
    """
    # (2) 闭包函数特点
    def majunqiang_family():
    	dajie = "马蓉"
    	erjie = "马冬梅"
    	kuang = "金矿"
    	# money 局部变量因为在闭包函数中使用,于是发生绑定,延长该变量的生命周期
    	money = 1000
    	
    	def dajie_hobby():
    		nonlocal money
    		money -= 900
    		print("大姐喜欢花钱,喜欢买兰博基尼,喜欢买比基尼,喜欢买channel,家里钱还剩下%d" % (money))
    
    	def erjie_hobby():
    		nonlocal money
    		money += 500
    		print("二姐马冬梅喜欢赚钱,喜欢上长春扎疫苗,因为假疫苗能赔偿,喜欢卖血,5块钱一瓶,家里钱赚了%d" % (money))
    
    	def master():
    		# 返回一个元组,元组里面的每一个元素是函数
    		return (dajie_hobby,erjie_hobby)
    		
    	return master
    
    
    func = majunqiang_family()
    tup = func()
    print(tup)
    # 大姐函数
    dajie = tup[0]
    dajie()
    # 二姐函数
    erjie = tup[1]
    erjie()
    

      

  • 相关阅读:
    第四章作业
    第二章上机实验报告
    对二分法的理解和结对编程情况
    Mysql与sql server的列的合并
    C#中如何去除窗体默认的关闭按钮
    C# 实现WinForm窗口最小化到系统托盘代码,并且判断左右鼠标的事件
    running total sql 2012+
    Poqwe Pivot error
    事务
    ssis 导EXCEL ERROR
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10835766.html
Copyright © 2020-2023  润新知