1. global关键字
在Python中,global关键字用于声明一个全局变量,可以在函数内部重新定义全局变量,并且使其在函数内外都可以被访问和修改。
下面是一个简单的示例,展示了global关键字的用法:
x = 10
def change_global():
global x
x = 20
change_global()
print(x) # 输出: 20
在上面的代码中,通过在函数内部使用global关键字声明x是一个全局变量,然后在函数内将其修改为20。最后在函数外部打印x的值,输出为20。
使用global关键字时需要注意:
1.1 声明全局变量
使用global关键字时,需要先在函数内部通过赋值语句为变量分配空间,然后再使用global关键字声明它是全局变量。否则,在函数内部直接使用global关键字声明变量将会引发SyntaxError。
def change_global():
global x
x = 20 # 正确的使用global关键字的方式
def change_global():
x = 20
global x # 错误的使用global关键字的方式
1.2 全局变量的访问和修改
在函数内部声明变量为全局变量后,可以在函数内部访问和修改全局变量的值。但是,如果在函数内部对全局变量使用赋值操作,而没有使用global关键字声明,Python会在函数内部创建一个新的局部变量,而不是修改全局变量的值。
x = 10
def change_global():
x = 20
print(x) # 输出: 20
change_global()
print(x) # 输出: 10
在上面的代码中,函数内部的赋值操作创建了一个名为x的局部变量,它的值为20。所以在函数内部打印x的值为20,而在函数外部打印x的值仍然为10。
如果想在函数内部修改全局变量的值,就必须使用global关键字。
2. nonlocal关键字
与global关键字类似,nonlocal关键字用于在嵌套函数中访问上一层(非全局)函数的变量。
下面是一个简单的示例,展示了nonlocal关键字的用法:
def outer():
x = 10
def inner():
nonlocal x
x = 20
inner()
print(x) # 输出: 20
outer()
在上面的代码中,内部函数inner使用nonlocal关键字声明变量x是外部函数outer的变量。然后在内部函数内部将变量x的值修改为20。最后在外部函数中打印变量x的值,输出为20。
使用nonlocal关键字时需要注意:
2.1 声明外部(非全局)变量
使用nonlocal关键字时,需要在嵌套函数内部通过赋值语句为变量分配空间,然后再使用nonlocal关键字声明它是外部变量。否则,在嵌套函数内部直接使用nonlocal关键字声明变量会引发SyntaxError。
def outer():
def inner():
nonlocal x
x = 20 # 正确的使用nonlocal关键字的方式
def inner():
x = 20
nonlocal x # 错误的使用nonlocal关键字的方式
2.2 外部变量的访问和修改
在嵌套函数内部声明变量为外部变量后,可以在内部函数内部访问和修改外部变量的值。但是,如果在内部函数内部对外部变量使用赋值操作,而没有使用nonlocal关键字声明,Python会在内部函数内部创建一个新的局部变量,而不是修改外部变量的值。
def outer():
x = 10
def inner():
x = 20
print(x) # 输出: 20
inner()
print(x) # 输出: 10
outer()
在上面的代码中,内部函数的赋值操作创建了一个名为x的局部变量,它的值为20。所以在内部函数内部打印x的值为20,而在外部函数中打印x的值仍然为10。
如果想在内部函数内部修改外部变量的值,就必须使用nonlocal关键字。
3. 总结
在Python中,global关键字用于声明一个全局变量,可以在函数内部修改全局变量的值。而nonlocal关键字用于在嵌套函数内部访问上一层(非全局)函数的变量,并且也可以在内部函数内部修改外部变量的值。
使用global和nonlocal关键字时,需要注意使用正确的语法,并且注意变量的访问和修改。
global关键字和nonlocal关键字的使用可以提高程序的灵活性,使得代码更加易读和易维护。