在下面的第二种情况下,Python试图寻找一个局部变量.当它没有找到一个时,为什么它不能像在第一种情况下那样在外部范围内看?
这在本地范围内查找x,然后在外部范围内查找:
def f1():
x = 5
def f2():
print x
Run Code Online (Sandbox Code Playgroud)
这给出了local variable 'x' referenced before assignment错误:
def f1():
x = 5
def f2():
x+=1
Run Code Online (Sandbox Code Playgroud)
我不允许修改函数f2()的签名,所以我不能传递和返回x的值.但是,我确实需要一种方法来修改x.有没有办法明确告诉Python在外部范围内查找变量名称(类似于global关键字)?
Python版本:2.7
hoc*_*chl 76
在Python 3.x中,这是可能的:
def f1():
x = 5
def f2():
nonlocal x
x+=1
return f2
Run Code Online (Sandbox Code Playgroud)
这篇文章给出了Python 2.x的问题及其解决方案.此外,请阅读PEP 3104以获取有关此主题的更多信息.
Tom*_*ock 56
def f1():
x = { 'value': 5 }
def f2():
x['value'] += 1
Run Code Online (Sandbox Code Playgroud)
解决方法是使用可变对象并更新该对象的成员.有时,Python中的名称绑定很棘手.
| 归档时间: |
|
| 查看次数: |
34782 次 |
| 最近记录: |