问题代码:
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