我写了两个简单的函数:
可能是重复问题:
Python作用域规则的简短描述
以下是这些函数:
# coding: utf-8
def test():
var = 1
def print_var():
print var
print_var()
print var
test()
# 1
# 1
def test1():
var = 2
def print_var():
print var
var = 3
print_var()
print var
test1()
# raise Exception
相比之下,test1()
在print var
之后赋值,然后引发异常:UnboundLocalError:local variable 'var' referenced before assignment
。我认为当我调用内部的print var
时,var的值为2,我错了吗?
global
声明在这里是无效的,因为var
是一个函数作用域变量。在Python 3中,你可以使用nonlocal
关键字,但是在这个例子中使用的是Python 2,无法实现OP想要做的事情。 - Martijn Pieters