Python----global和nolocal关键字的用法

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关键字的使用可以提高程序的灵活性,使得代码更加易读和易维护。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

上一篇:python-- re 模块

下一篇:python-- os 模块

后端开发标签