python 闭包

def make_test_dice(*outcomes):

    index = len(outcomes) - 1 #定义的外层变量index

    def dice():
        nonlocal index #声明index是外层变量,而非局部变量
        index = (index + 1) % len(outcomes)
        return outcomes[index]
    return dice

test = make_test_dice(1,2,3) #test不是make_test_dice(1,2,3)本身,而是对dice函数的引用。

print(test()) #1
print(test()) #2
print(test()) #3

print(make_test_dice(1,2,3)()) #1
print(make_test_dice(1,2,3)()) #1
print(make_test_dice(1,2,3)()) #1
test = make_test_dice(1,2,3)

上述代码:

1.make_test_dice只会调用一次,初始化*outcoms和index,

2.并返回dice这个内层函数,这个返回的dice函数包含了*outcoms和index的闭包,

因此test = make_test_dice(),并不是test等于函数make_test_dice()本身,而是对函数dice的引用。当调用test()时,只是在调用返回的dice函数,而不会重新调用make_test_dice()。

而任何对index变量的修改都会直接作用在外层的index上,并保持修改后的值以供下次调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值