Python(5)————函数闭包方法

来源:互联网 发布:c语言vc6.0软件下载 编辑:程序博客网 时间:2024/06/05 18:42

闭包方法:

通过一定的方式将函数内部的局部变量或者内部函数转移到函数之外的方法

方法一

基本原理就是: 
让一个内部函数带着函数中的数据通过return返回出来,然后这个出来的内部函数再通过return把它带出来的数据返回出来,然后用变量接受!

代码送上
def test():    #局部变量    var = '局部变量'    var1 = '局部变量1'    var2 = '局部变量2'    #内部函数    def func():        print('内部函数')    def func1():        print('内部函数1')    def func2():        print('内部函数2')        #把想调出的        return (var,var1,var2,func,func1)    return func2
#调出内部函数result = test() #(func2)print(result)result1 = result() #print(result1)val = result1[0]val1 = result1[1]val2 = result1[2]func3 = result1[3]func4 = result1[4]print(val)print(val1)print(val2)func3()func4()
引用我们老师上课的例子.....(这不算剽窃吧?)、
def home():    #局部变量    #钱    money = '100越南盾'    #狗    dog = '旺财'    #内部函数    #妹妹    def newsister():        print('老娘是卫东的妹妹!')    #车    def car():        print('老子是卫东夹的拖拉机')    # 姐姐    def oldsister():        #在姐姐离家之前,从家里搬东西        print('我是卫东的姐姐')        #存放东西的容器,元祖        return (money,dog,car,newsister)    #姐姐离家出走    return oldsister
#调用函数
#天宝来接应卫东的姐姐tianbao = home()#提前查看带出来的内部数据print(tianbao.__closure__)#接收卫东姐姐带出来的东西#相当与调用乐 oldsister的函数things = tianbao()print(things)#接收钱qian = things[0]#接收狗gou = things[1]#接收车che = things[2]#接收妹妹meimei = things[3]print(qian)print(gou)che()meimei()
图解:

方法二

基本原理就是:
先声明一个全局变量,然后在函数内部再把需要的数据以元组的形式赋值给这个全局变量,然后调用一遍函数,这个全局变量就被重新赋值了,因为是个元祖类型,可以用索引把想要的数据获取出来!

但是这个方法我们并不推荐使用因为容易污染全局变量空间导致特定名称的变量产生!

话不多说,代码送上...
#声明一个全局变量spvar = Nonedef test():    #全局声明一下全局变量    global spvar    #局部变量    var = 10    var2 = 11    var3 = 12    print('test')    #内部函数    def func():        print('内部函数')    def func1():        print('内部函数1')    def func2():        print('内部函数2')    spvar = (var,var2,func1,func2)
调用函数
#调用函数test()#打印全局变量(元组)print(spvar)#访问变量print(spvar[0],spvar[1])spvar[2]()spvar[3]()
丛浩讲师代码奉上!
#声明张帅变量zhangshuai = None#伟任的家def home():    #全局声明(到别人家认干亲)    global zhangshuai    #局部变量    #钱    money = 1    #狗    dog = '大黄'    #猫    cat = '咪咪'    #内部函数    #妹妹    def sister():        print('我是伟任的小妹妹~')    #弟弟    def brother():        print('我是伟任的小弟弟~')    #张帅 打包干爹干妈加的东西    zhangshuai = (money,dog,sister)
调用函数
#调用函数home()#访问zhangshuai变量print(zhangshuai)#钱qian = zhangshuai[0]#狗gou = zhangshuai[1]#小妹妹meimei = zhangshuai[2]#访问所有带出来的数据print(qian)print(gou)meimei()
图解:

今天的闭包就到这里啦。。。。。






阅读全文
0 0
原创粉丝点击