函数里面的global 和 nonlocal 关键字的使用
Posted zpdbkshangshanluoshuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数里面的global 和 nonlocal 关键字的使用相关的知识,希望对你有一定的参考价值。
"""
global和nonlocal关键字:
当修改全局变量时,使用global关键字声明;
当修改嵌套作用域(enclosing作用域,外层非全局作用域)时,使用nonlocal关键字声明;
global和nonlocal关键字:
当修改全局变量时,使用global关键字声明;
当修改嵌套作用域(enclosing作用域,外层非全局作用域)时,使用nonlocal关键字声明;
"""
#修改全局变量时,使用global关键字声明;
a=10
def f():
global a # global修改全局变量,先声明
a=20
print(a)
def f1():
a=30
print(a)
f1()
print(a)
print(a)
f()
def f():
global a # global修改全局变量,先声明
a=20
print(a)
def f1():
a=30
print(a)
f1()
print(a)
print(a)
f()
"""
10
20
30
20
"""
10
20
30
20
"""
#修改嵌套作用域(enclosing作用域,外层非全局作用域)时,使用nonlocal关键字声明;
a=10
def f():
a=20 #这个 a 是嵌套作用域(enclosing作用域,外层非全局作用域)
def f1():
nonlocal a
a=30
print(a)
f1()
print(a)
print(a)
f()
def f():
a=20 #这个 a 是嵌套作用域(enclosing作用域,外层非全局作用域)
def f1():
nonlocal a
a=30
print(a)
f1()
print(a)
print(a)
f()
"""
下面这段代码运行时会报错,因为test函数中的a是局部变量,未被定义;
UnboundLocalError: local variable ‘a‘ referenced before assignment
"""
a=10
def test():
a=a+1
print(a)
test()
def test():
a=a+1
print(a)
test()
#如下:把全局变量a传入函数test里,可正常执行
a=10
def test(a):
a=a+1
print(a)
test(a)
以上是关于函数里面的global 和 nonlocal 关键字的使用的主要内容,如果未能解决你的问题,请参考以下文章
python(动态传参命名空间函数嵌套global和nonlocal关键字)
Python中的闭包global关键字nonlocal关键字和装饰器
python函数--万能参数,形参,名称空间,嵌套,内置函数globals locals ,关键字nonlocal global