天天看点

Python中变量作用域

在def中定义的变量都是局部变量

def foo():
    a = 200
    print(a) 
    def fooo():
        a=a+300
        print(a)
    fooo()
    
foo()
           

运行得到:

UnboundLocalError: local variable 'a' referenced before assignment
           

也就是说在函数fooo中并没有设置变量a,从而无法进行运算

1.第一次修改

def foo():
    global a
    a=200
    print(a)
    def fooo():
        a=a+300
        print(a)
    fooo()
foo()
           

运行得到:

200
----------
UnboundLocalError: local variable 'a' referenced before assignment
           

在这次的修改中我们在函数foo中对变量a进行global的声明,但是在函数fooo中仍无法对a的值进行修改,这是因为对a进行声明后,函数fooo只对a有使用权,而没有修改权,也可以看下面的例子

a=200
def foo():
    a=a+1;
    print(a)
foo()
           
UnboundLocalError: local variable 'a' referenced before assignment
           

放在外面的a是全局变量,此时foo对a有使用但是没有修改权,但是在同一层级上则可以做修改

a=200
def foo():
    print(a)
    def fooo():
        global a
        a=a+300
        print(a)
    fooo()
foo()
           

运行得到:

200
500
           

在fooo中对a做声明后,提高了fooo对变量a操作的权限