怀疑python变量范围

时间:2012-09-12 06:39:24

标签: python scope

  

可能重复:
  Short Description of Python Scoping Rules

我写了两个简单的函数:

# 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我错了吗?

1 个答案:

答案 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