【Python基础】变量的作用域与global、nonlocal
在 Python 中,变量的作用域指的是变量可以被访问的范围。Python 中的变量作用域有两种:
- 局部作用域:变量在函数函数内部的时候,只能在函数内部使用。这样的变量被称为局部变量。
- 如果在函数内部定义了一个变量,那么该变量只能在函数内部使用,如果想要在函数外部访问该变量,需要使用return语句将其返回。
- 全局作用域:变量在函数外部定义的时候,可以在任何地方访问。这样的变量被称为全局变量。
- 如果你在函数外部定义了一个变量,那么该变量可以在任何地方访问,包括函数内部和外部。
global
如果你想在函数内部修改全局变量的值,可以使用global
关键字。例如:
x = 10 # 全局变量
def foo():
"""需要注意的是,如果在内部定义了局部变量,那么在这之前访问该变量将会报错"""
x = 30
print("函数内部尝试修改全局变量x为", x) # 函数内部尝试修改全局变量x为 30
foo()
print("最终的全局变量x", x) # 最终的全局变量x 10
def foo1():
"""在这里,如果在global声明之前访问了x,那么x就会被定义为局部变量,那么再次声明global x 将会报错"""
global x
x = 20 # 修改全局变量
print("函数内部尝试使用global修改x为", x) # 函数内部尝试使用global修改x为 20
foo1()
print("最终的全局变量x为", x) # 最终的全局变量x为 20
在上面的代码中,我们使用global关键字在函数内部声明了x为全局变量。然后在函数内部修改了x的值。最后,在函数外部打印x的值,输出的结果为20。
需要注意的是,在使用global关键字之前,必须先在函数外部定义该全局变量。否则,Python 会将该变量视为局部变量,而不是全局变量。
此外,在函数内部不要滥用global关键字,应该尽可能地避免修改全局变量的值,以避免出现意外的错误。
nonlocal
nonloca
用于在嵌套函数中使用变量,其中变量不应属于内部函数。使用 nonlocal
关键字声明该变量不是局部变量。nonlocal 语句使列出的标识符引用最近的封闭范围中以前绑定的变量,不包括全局变量。nonlocal 关键字不能用于局部或全局变量,因此必须用于引用除全局和局部范围之外的另一个范围中的变量。
下面是一个简单的示例,演示了如何在嵌套函数中使用 nonlocal 关键字:
def outer():
x = "local"
def inner():
nonlocal x # 在 inner 函数中使用 nonlocal 关键字来声明 x 变量不是局部变量
x = "nonlocal" # 在 inner 函数中更改 x 变量的值时,它实际上更改的是 outer 函数中的 x 变量
print("inner:", x)
inner()
print("outer:", x)
outer()
# 输出inner: nonlocal
# 输出outer: nonlocal
关于nonlocal有几点需要注意的
- nonlocal 关键字只能在嵌套函数中使用。如果在非嵌套函数中使用 nonlocal 关键字,Python 解释器会抛出 SyntaxError。
- nonlocal 关键字不能用于局部或全局变量。它只能用于引用除全局和局部范围之外的另一个范围中的变量。
- nonlocal 关键字只能用于已经在封闭范围中绑定的变量。如果在封闭范围中没有找到变量,Python 解释器会抛出 SyntaxError。
- nonlocal 关键字不能用于改变不可变数据类型(如字符串、元组或数字)的值。它只能用于改变可变数据类型(如列表或字典)的值。
本文来自博客园,作者:'Radio',转载请注明原文链接:https://www.cnblogs.com/primice/p/17379542.html