python陷阱 – 变量作用域
这个程序会输出什么?
1 2 3 4 5 6 7 8 9 | 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的引用之前,象这样:
1 2 3 4 5 | def test_func(): global a print a a = 2 print a |