python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 。 global 一、在局部如果声明全局变量,可以对全局变量修改,否则不行 gcount = 0 def global_test(): ....global gcount ....gcount+=1 ....print (gcount) global_test() 正确输出 1 ———————————————————————————— gcount = 0 def global_test(): ....gcount+=1 ....print (gcount) global_test() UnboundLocalError: local variable 'gcount' referenced before assignment 如果函数内要对全局变量修改,需要使用关键字global 二、 在局部如果不声明全局变量,并且不修改全局变量。则可以正常使用全局变量: gcount = 0 def global_test(): ....print (gcount) global_test() 如果在局部不修改全局变量,程序正确输出 0 三、nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。 def make_counter(): ....count = 0 ....def counter(): ........nonlocal count #使用外层的count变量 ........count += 1 ........return count ........return counter

def make_counter_test(): ....mc = make_counter() ....print(mc()) ....print(mc()) ....print(mc())

make_counter_test() 输出:

1

2

3