python陷阱 - 变量作用域
这个程序会输出什么?
a = 1
def test_func():
print a
a = 2
print a
print a
test_func()
print a
正确的答案是,test_func的第一个print会触发异常,这是因为python著名的"Global Unless Assigned"规则。
因为在test_func中有"a=2"这样的语句,这会导致test_func中a被作为局部变量,所以在执行第一个print a时会出错(此时尚未赋值)。解决方法是在 test_func 中加入global a这样的声明,声明甚至可以放在第一个print之后,但会导致一个告警,所以通常的写法都是写在a的引用之前,象这样:
def test_func():
global a
print a
a = 2
print a
a = 1
def test_func():
print a
a = 2
print a
print a
test_func()
print a
正确的答案是,test_func的第一个print会触发异常,这是因为python著名的"Global Unless Assigned"规则。
因为在test_func中有"a=2"这样的语句,这会导致test_func中a被作为局部变量,所以在执行第一个print a时会出错(此时尚未赋值)。解决方法是在 test_func 中加入global a这样的声明,声明甚至可以放在第一个print之后,但会导致一个告警,所以通常的写法都是写在a的引用之前,象这样:
def test_func():
global a
print a
a = 2
print a

0 Comments:
发表评论
<< Home