我有这个代码:
def r():
i += 1
return i
def f():
return x*a
i = 0
a=2
x=3
print f()
print r()
我在 r() 中遇到了这个错误,但在 f() 中却没有:
~$ python ~/dev/python/inf1100/test.py
6
Traceback (most recent call last):
File "/home/marius/dev/python/inf1100/test.py", line 18, in <module>
print r()
File "/home/marius/dev/python/inf1100/test.py", line 2, in r
i += 1
UnboundLocalError: local variable 'i' referenced before assignment
为什么 f() 可以使用函数外定义的变量,而 r() 不能?
请您参考如下方法:
那是因为r重新分配了全局变量i。 f 另一方面只是使用它。请记住,i += 1 与 i = i + 1 相同。
除非您明确说明,否则 Python 会将函数中使用的所有变量视为局部变量。此外,由于在 r 的本地范围内没有定义变量 i,因此会引发错误。
如果你想在一个函数中重新分配一个全局变量,你必须输入:
global var
在函数顶部显式声明 var 是全局的。
因此,要使 r 正常工作,应将其重写为:
def r():
global i
i += 1
return i
