Python全局/局部变量

JJ *_*eck 10 python global-variables local-variables

为什么这段代码有效:

var = 0

def func(num):
    print num
    var = 1
    if num != 0:
        func(num-1)

func(10)
Run Code Online (Sandbox Code Playgroud)

但是这个给出了"赋值前引用的局部变量'var'错误:

var = 0

def func(num):
    print num
    var = var
    if num != 0:
        func(num-1)

func(10)
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 9

因为在第一个代码中,您创建了一个局部变量var并使用了它的值,而在第二个代码中,您使用的是局部变量var,而没有定义它.

所以,如果你想让你的第二个功能工作,你需要声明: -

global var
Run Code Online (Sandbox Code Playgroud)

在使用之前的功能var.

def func(num):
    print num
    var = 1  <--  # You create a local variable
    if num != 0:
        func(num-1)
Run Code Online (Sandbox Code Playgroud)

而在此代码中:

def func(num):
    print num
    var = var <--- # You are using the local variable on RHS without defining it
    if num != 0:
        func(num-1)
Run Code Online (Sandbox Code Playgroud)

更新: -

但是,根据@Tim的评论,你不应该global在你的函数中使用变量.而是在使用变量之前对变量进行定义,以便将其用于local scope.通常,您应该尝试将limit变量的范围local,甚至local命名空间limit中的局部变量的范围,因为这样您的代码将更容易理解.

增加变量范围的次数越多,外部源使用它的可能性就越大,不需要使用它.


And*_*ark 6

如果var = ...函数中有任何位置,则名称"var"将被视为整个函数的局部变量,无论该赋值发生在何处.这意味着var函数中的所有出现都将在局部作用域中解析,因此右侧会var = var导致引用之前的赋值错误,因为var尚未在函数的作用域中初始化.