我写了两个简单的函数:
# 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我错了吗?
答案 0 :(得分:1)
是的,你在这里不正确。函数定义引入了一个新的范围。
# coding: utf-8
def test():
var = 1
def print_var():
print var <--- var is not in local scope, the var from outer scope gets used
print_var()
print var
test()
# 1
# 1
def test1():
var = 2
def print_var():
print var <---- var is in local scope, but not defined yet, ouch
var = 3
print_var()
print var
test1()
# raise Exception