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


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

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

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

Python 中有 4 个主要作用域,分别是内置作用域、全局作用域、封闭作用域、局部作用域。

局部作用域

在函数中定义的变量是具有局部作用域的变量。函数体包含这些变量的定义。

示例

让我们使用一个示例来帮助您理解这个概念。示例 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.