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

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

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

作用域决定了调节变量在哪里和如何进行搜索的规则。变量可以通过搜索来分配值或检索值。命名空间为变量或过程提供了唯一的标识。命名空间详细说明了对象的名称和Python解释器正在尝试访问的位置。

根据LEGB规则,对命名空间的作用域解析进行检查。E表示”enclosed(封闭的)”,G表示”global(全局的)”,B表示”built-in(内置的)”,L表示”local(局部的)”。LEGB的顺序非常重要。先搜索局部变量,然后搜索封闭变量,然后搜索全局变量,最后搜索内置变量。

Python中有4个主要的作用域,分别是内置(Built-In)、全局(Global)、封闭(Enclosing)和局部(Local)。

局部作用域

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

示例

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程