Python模块中的变量作用域是如何工作的?


Python对象的范围决定了它的可访问性。为了访问代码中特定的变量,必须指定其作用域,因为它无法从程序的任何地方访问。术语“作用域”描述了变量显示的精确编码区域。可以限制变量的可见性,以便只有某些人才能看到它们。作用域确定哪些变量是“可见”的。

作用域确定控制如何以及在哪里搜索变量的规则。搜索变量是为了赋值或检索值。命名空间为变量或过程提供唯一的标识。命名空间详细说明了对象的名称以及Python解释器试图访问该对象的位置。

根据LEGB规则检查命名空间的作用域解析。E代表“封闭的”,G代表“全局的”,B代表“内置的”,L代表“局部的”。LEGB的顺序非常重要。首先搜索局部变量,然后是封闭变量,然后是全局变量,最后是内置变量。

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

更新于:2022年9月16日

1K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.