python的2.x版本中闭包各种写法

2.x版本不支持noloacl,闭包各种使用方法如下:

'''
闭包相关的测试
https://stackoverflow.com/questions/3190706/nonlocal-keyword-in-python-2-x
http://cndenis.iteye.com/blog/1754743
'''

def outer():
    def inner():
        inner.y += 1
        return inner.y
    inner.y = 0
    return inner

def outer2():
    d = {'y' : 0}
    def inner():
        d['y'] += 1
        return d['y']
    return inner

def outter3():
    x = {}
    x[0] = 1
    def inner():
        print("inner is called, x=", x[0])
        x[0] = x[0] + 1
    print("outter after inner called, x=", x[0])
    return inner

class C(object):
    pass

def outter4():
    x = C()
    x.v = 1
    def inner():
        print("inner is called, x=", x.v)
        x.v = x.v+1
    print("outter after inner called, x=", x.v)
    return inner


#2.75闭包中nolocal设置
if __name__ == '__main__':
    f = outer()
    g = outer()
    print(f(), f(), g(), f(), g()) #prints (1, 2, 1, 3, 2)

    h = outer2()
    print(h(), h(), h())  # prints 1 2 3

    h1 = outter3()
    print(h1(),h1(),h1())

    h2 = outter4()
    print(h2(), h2(), h2())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小她爹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值