python----3.15--闭包

#闭包:在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。


def wai():
    mylocetion = [0]
    def nei():
        mylocetion[0] += 1
        print(mylocetion[0])
        return mylocetion
    return nei#外函数返回内函数,并结束自己,此时发现内函数要使用自己的零时变量,于是外函数的零时变量被保存。(本来函数结束后应该删除)
            #此变量会一直存在,直到删除


t1 = wai()
print(type(t1))#-----<class 'function'>,t1实际上可就是内函数,此函数带有外函数无法删除的零时变量
t1()
t1()
t1()#每一次调用内函数,都是一次内函数的执行消亡,但是其使用的外函数的闭包变量(即应内函数调用无法删除的变量)只有一份,因此闭包变量被更改并保存。


def outer(x):
    def inner(y):
        nonlocal x
        x+=y#x = x + 1---------当在内函数中重新定义(创建)x 变量时,函数默认x是局部变量。
        return x
    return inner


a = outer(10)
print(a(1))
print(a(3))

#python中,一个函数可以随意的读取全局数据(在其内部没有此数据的情况下,他会向上一级查找),但是其要修改上一级的数据,则此数据必须为可修改的:(两种实现方法)
#              1global 声明全局变量
#              2:全局变量是可变类型数据的时候可以修改
#              3:用nonlocal 关键字声明 一个变量, 表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量。---注:只可以在闭包中使用

#跑步记步程序
def func(pep):
    start = 0
    def nei(fc):
        nonlocal start
        name = pep
        start += fc
        print(pep + " he had run %d ! "%start)
    return nei


pep1 = func("小明")
pep2 = func("小红")
pep3 = func("小王")

pep1(1)
pep1(3)
pep1(5)
print("---------------------------------")



pep2(8)
pep2(10)
pep2(15)
print("---------------------------------------")


pep3(6)
pep3(18)
pep3(21) 

#结果=====================================================
小明 he had run 1 ! 
小明 he had run 4 ! 
小明 he had run 9 ! 
---------------------------------
小红 he had run 8 ! 
小红 he had run 18 ! 
小红 he had run 33 ! 
---------------------------------------
小王 he had run 6 ! 
小王 he had run 24 ! 
小王 he had run 45 ! 

 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值