Python模块中的变量作用域是如何工作的?
Python对象的作用域决定了它的可访问性。为了访问代码中特定的变量,必须指定作用域,因为它无法从程序中的任何位置访问。术语“作用域”描述了变量显示的精确编码区域。可以限制变量的可见性,以便只有特定的人可以看到它们。作用域确定哪些变量可以“看到”。
作用域确定规则并规定了变量可以被搜索的方式和位置。变量被搜索以赋值或检索值。命名空间为变量或过程提供了唯一的标识。命名空间详细说明了对象的名称以及Python解释器正在尝试访问的位置。
根据LEGB规则,命名空间的作用域分辨率是通过以下方式进行的。 E代表“嵌套”,G代表“全局”,B代表“内置”,而L代表“本地”。LEGB的顺序非常重要。首先,在局部搜索,然后在被封闭的搜索,然后在全局搜索,最后在内置搜索中搜索变量。
更多Python相关文章,请阅读:Python 教程
Python中有四个主要的作用域,即内置作用域、全局作用域、嵌套作用域、本地作用域。
本地作用域
在函数中定义的变量是具有本地作用域的变量。函数体包含对这些变量的定义。
示例
让我们使用一个例子来帮助你理解这个概念。在示例1中使用了一个变量num。Num = 0不是本地变量,因为它是在函数外定义的。根据我们的定义,局部变量是在函数体内声明的变量。在这里,局部变量num = 1被设置并在demo函数内打印。
num=0
def demo():
#print(num)
num=1
print("The Number is:",num)
demo()
输出
生成的输出如下所示。
The Number is: 1
全局作用域
全局作用域变量是可以从程序的任何地方读取的变量。在代码内部和外部都可以访问这些变量。当我们打算在程序的其余部分中使用变量时,我们将变量声明为全局变量。
示例
上面的例子展示了如何在函数外声明一个称为str的变量。当调用函数demo时,将打印变量str的值。在函数内部使用全局变量时,不需要使用global关键字。
def demo():
print(Str)
# Global
Str = "Hello World"
demo()
输出
生成的输出如下所示。
Hello World
嵌套或非本地作用域
在嵌套函数中指定的变量被称为非本地变量。这表示变量不能同时具有本地作用域和全局作用域。使用nonlocal关键字生成非本地变量。
示例
内部函数嵌套在以下代码中生成的外部函数中()。Inner()函数在outer()函数的作用域中定义。对在inner()函数中声明的非本地变量所做的更改反映在outer函数的输出中。
def Outer():
x = "local"
def Inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
Inner()
print("outer:", x)
Outer()
输出
输出如下。
inner: nonlocal
outer: nonlocal