在以下函数中,内部函数不会修改参数,只是修改副本。
def func():
i = 3
def inc(i):
i = i + 3
print i
inc(i)
inc(i)
print i
func()
是否可以避免重复代码并将其放在python中的函数内?我也尝试了以下操作,但它会抛出错误UnboundLocalError: local variable 'i' referenced before assignment
def func():
i = 3
def inc():
i = i + 3
print i
inc()
inc()
print i
func()
答案 0 :(得分:3)
在python 3中你会这样做:
def func():
i = 3
def inc():
nonlocal i
i = i+3
print(i)
inc()
inc()
print(i)
func()
在python 2.x中使用global
不起作用,因为变量在外部范围内,但它不是全局的。因此,您需要将变量作为参数传递。
这是PEP 3104解决的问题。
答案 1 :(得分:2)
怎么样:
def func():
i = 3
def inc(i):
return i + 3
print i
i = inc(i)
i = inc(i)
print i
func()
答案 2 :(得分:0)
在Python 3中,您可以使用nonlocal
。
>>> def func():
i = 3
def inc():
nonlocal i
i += 3
print(i)
inc()
inc()
print(i)
>>> func()
3
9
>>>