python global和nonlocal_python中global 和 nonlocal 的作用域

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

你可能感兴趣的:(python,global和nonlocal)