Python命名空间与作用域深入全面详解

Python命名空间与作用域深入全面详解攻略

Python是一门解释型语言,在执行代码时需要进行解释。在语言中,每一个对象都有一个命名空间。而在程序代码中,每一个名字都属于对应的命名空间。Python中的变量作用域遵循LEGB规则,即从局部作用域开始寻找变量,一直找到全局作用域,如果还未找到,就会报错。

Python命名空间详解

命名空间是Python中的一个虚拟容器,用于存储变量和函数等对象。它们在代码中以字典的方式实现。Python中存在三种命名空间:

  1. 内置命名空间:系统内置的名称在这里被存放。比如,我们使用的print()函数,就是内置命名空间中的对象。
  2. 全局命名空间:模块文件所在的命名空间称为全局命名空间。
  3. 局部命名空间:函数调用时,随函数调用而产生的命名空间称为局部命名空间。

当Python查找某个对象时,会从当前作用域开始,然后由内向外依次在不同的命名空间中查找。如果某个名称没有在当前命名空间中找到,就会去上一级命名空间查找,直到最终抵达内置命名空间。

Python作用域详解

Python中的作用域分为四种:

  1. L (Local):局部变量作用域,仅在函数内部使用。
  2. E (Enclosing):闭包变量作用域,当一个函数存在嵌套关系时,在其中一个函数内部嵌套的函数中使用的变量,称为闭包变量,其作用范围为该闭包内部及其外部函数内部。
  3. G (Global):全局变量作用域,可在模块内任何位置使用。
  4. B (Built-in):内置变量作用域,Python内置的函数和变量名拥有该作用域。

在LEGB规则中,从L开始寻找,如果找不到,就向E寻找;如果E中仍然找不到,则向G中寻找;最后,如果都找不到,则进入B寻找。

示例

a = 10  # a属于全局命名空间

def func1():
    b = 20  # b属于局部命名空间
    def func2():
        c = 30  # c属于内嵌函数中的局部命名空间
        print(a, b, c)
    func2()

func1()  # 结果为10, 20, 30

在这个示例中,我们定义了一个全局变量a,值为10,并在func1()中定义了变量b,值为20。在func2()的内嵌内部定义了变量c,值为30。在func2()中,我们打印了ab,和c的值,最终结果为102030

a = 10  # a属于全局命名空间

def func1():
    a = 20
    print(a)

func1()  # 结果为20

print(a)  # 结果为10

在这个示例中,我们定义了全局变量a,值为10。在func1()中我们定义了变量a,值为20。在func1()中我们打印了变量a,结果为20。在全局范围内我们打印变量a,结果为10

以上就是Python命名空间与作用域的详细介绍及两个示例说明。如果我们对Python命名空间和作用域有进一步的理解,就能更好地开发Python程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python命名空间与作用域深入全面详解 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python编程中的异常处理教程

    Python编程中的异常处理教程 异常处理的概念 在编程的过程中,程序可能会出现错误。这些错误被称为“异常”。Python中提供了一套异常处理机制,可以捕捉并处理这些异常,使得程序能够在出现异常时做出应有的响应,而不是直接奔溃。 异常处理的语法 在Python中,可以使用try…except…语句来捕捉并处理异常。语法如下: try: # 可能会出现…

    python 2023年5月13日
    00
  • Python 解析日志之命名元组

    Python中常用的日志模块为logging模块,使用这个模块可以对Python应用程序的运行状态进行记录,以便查询和分析。但在日志量比较大或者需要对日志进行统计分析时,如何解析日志变得尤为重要。在Python中,我们可以使用命名元组来解析日志记录,本文将为大家介绍命名元组的使用方法以及如何使用命名元组来解析日志。 什么是命名元组? 命名元组(namedtu…

    python-answer 2023年3月25日
    00
  • python实现学生管理系统源码

    Python实现学生管理系统源码 1. 概述 学生管理系统是非常基础的管理系统,它可以帮助老师和管理员轻松管理学生信息。在Python中,我们可以使用面向对象的编程思想来实现学生管理系统,数据可以存储在本地或者数据库中。 2. 实现步骤 2.1. 设计数据模型 首先需要设计好数据模型,即需要存储哪些信息,例如学生的姓名、学号、性别、年龄、班级等信息。然后根据…

    python 2023年5月30日
    00
  • Python编程基础之输入与输出

    Python编程基础之输入与输出 在Python编程中,输入和输出是相当重要的概念。输入是指从用户处获取数据,输出是指将数据显示给用户。本篇文章将介绍在Python中如何进行输入和输出的操作。 输出 使用Python的print函数可以将数据输出到控制台。print函数可以接受多个参数。下面是一个简单的示例: print("Hello World!…

    python 2023年5月30日
    00
  • python实现根据用户输入从电影网站获取影片信息的方法

    本攻略将介绍如何使用Python实现根据用户输入从电影网站获取影片信息的方法。我们将使用requests库获取网页内容,并使用BeautifulSoup库解析网页内容。我们将提供两个示例,分别用于获取单个影片的信息和获取多个影片的信息。 获取单个影片的信息 以下是一个示例代码,用于获取单个影片的信息: import requests from bs4 imp…

    python 2023年5月15日
    00
  • 对python周期性定时器的示例详解

    这里是对Python周期性定时器的示例详解攻略。 什么是周期性定时器 周期性定时器是Python中的一个模块,可以在指定的时间间隔后调用一个函数。在Python中,周期性定时器可以使用Timer或Thread来构造。 使用Timer构造周期性定时器 Timer是Python的内置模块之一,它可以实现线程间定时器功能。下面是一个使用Timer构造周期性定时器的…

    python 2023年6月2日
    00
  • Python简单爬虫导出CSV文件的实例讲解

    首先我们需要明确一下,网页爬虫是用来从互联网上抓取数据的一种程序。而CSV是一种常用的数据格式,它是一种简单的、基于文本的表格表示方法,用于表示由逗号分隔的值(即CSV文件)。 那么,如何在Python中编写一个简单的爬虫程序,并将爬取到的数据导出为CSV文件呢?下面我会详细介绍。 一、准备工作 在开始编写爬虫程序之前,我们需要安装一些必要的Python库,…

    python 2023年6月3日
    00
  • pip 错误unused-command-line-argument-hard-error-in-future解决办法

    pip是Python语言的包管理器,用于管理Python模块的安装和升级。在使用pip时,有可能会遇到“unused-command-line-argument-hard-error-in-future”的错误提示。本文将详细讲解这个错误的原因和解决办法,帮助读者快速解决此问题。 错误原因: Python 3.7版本的pip在使用时会发生这个错误。这是由于P…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部