zoukankan      html  css  js  c++  java
  • 闭包函数

    # 闭包函数
    '''
    闭包:
    	内函数使用了外函数的局部变量,
    	并且外函数把内函数返回出来的过程是闭包
    	这个内函数叫做闭包函数;
    '''
    # (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()
    

      

  • 相关阅读:
    HeadFirst Ruby 第七章总结 references
    《HTTP 权威指南》笔记:第三章 HTTP 报文
    HTTP 权威指南 第二章 URL 与资源
    HeadFIrst Ruby 第七章总结 hashes
    HeadFIrst Ruby 第六章总结 block return values
    面向对象的面试题
    属性,类方法,静态方法,Python2和3方法
    类的抽象类接口类,多态封装
    类的继承
    面向对象空间和组合
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10835766.html
Copyright © 2011-2022 走看看