UnboundLocalError: local variable 'c' referenced before assignment

问题代码:

def outer():
    c = 0
    def inner():
        c += 1
        print 'inner'
        print c
    print 'outer'
    return inner()

outer()

报错:

UnboundLocalError: local variable 'c' referenced before assignment

解决方法:
1.python2.7使用global

c = 0
def outer():
    def inner():
        global c            # python2.7使用global
        c += 1
        print 'inner'
        print c
    print 'outer'
    return inner()

outer()
outer()
outer()

输出:

outer
inner
1
outer
inner
2
outer
inner
3

2.python3使用nonlocal

def outer():
    c = 0
    def inner():
        nonlocal c          # python3使用nonlocal
        c += 1
        print ('inner')
        print (c)
    print ('outer')
    return inner()

outer()
outer()
outer()

参考:https://www.cnblogs.com/thinking-jxj/p/7681415.html

另外,

def outer():
    c = 0
    def inner():
        print 'inner'
        print c             # 直接访问不修改值,不报错
    print 'outer'
    return inner()

outer()
outer()
outer()

输出:

outer
inner
0
outer
inner
0
outer
inner
0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值