为什么这段代码有效:
var = 0
def func(num):
print num
var = 1
if num != 0:
func(num-1)
func(10)
但是这个给出了一个“赋值前引用的局部变量‘var’”错误:
var = 0
def func(num):
print num
var = var
if num != 0:
func(num-1)
func(10)
最佳答案
因为在第一段代码中,您创建了一个局部变量 var
并使用了它的值,而在第二段代码中,您使用的是局部变量 var
,没有定义它。
所以,如果你想让你的第二个函数工作,你需要声明:-
global var
在使用 var
之前的函数中。
def func(num):
print num
var = 1 <-- # You create a local variable
if num != 0:
func(num-1)
而在这段代码中:
def func(num):
print num
var = var <--- # You are using the local variable on RHS without defining it
if num != 0:
func(num-1)
更新:-
但是,根据@Tim 的评论,您不应在函数中使用global
变量。而是在使用变量之前定义变量,以便在 local scope
中使用它。通常,您应该尝试将变量的范围限制
到local
,甚至在local
命名空间limit
局部变量的范围,因为这样你的代码会更容易理解。
您增加变量的范围越多,它被不需要使用的外部源使用的机会就越大。
关于Python 全局/局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091357/