此代码为何起作用:
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,而没有对其进行定义。
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。通常,您应该尝试将limit变量的范围设置为local,甚至在local命名空间limit中将局部变量的范围设置为,因为这样您的代码将更容易理解。
global
local scope
limit
local
变量范围的增加越多,外部源(不需要使用该源)使用它的机会就越大。