详解Python 中的命名空间、变量和范围

详解Python 中的命名空间、变量和范围

Python 是一门动态类型的语言,它的变量具有强大的动态特性。Python 中的变量实际上是一个指向对象的标识符,它拥有命名空间和范围。

命名空间

Python 中的命名空间指的是存储变量名称和其所指向的对象的对应关系的数据结构。命名空间可以是内置命名空间、全局命名空间和局部命名空间。

内置命名空间

内置命名空间是在 Python 解释器启动时创建的,其中包含了 Python 的内置函数和内置模块。内置命名空间是全局可用的。可以使用 dir(__builtins__) 命令来查看所有内置函数和变量。

全局命名空间

全局命名空间指的是在模块顶部定义的变量和函数的命名空间。它在执行模块时创建,并在模块生命期内一直存在。全局命名空间对于整个模块都是可见的,可以在函数中通过 global 关键字声明一个变量为全局变量。如果变量没有在函数中声明为全局变量,则它被视为局部变量。

局部命名空间

函数的局部命名空间指的是在函数体内定义的变量和函数的命名空间。它只在函数被调用时创建,并且在函数返回后被销毁。当使用 globalnonlocal 关键字在函数中声明变量时,变量将被视为全局或非局部变量。

以下示例演示了不同命名空间之间的影响:

a = 10  # 全局命名空间中的变量

def foo():
    a = 5  # 局部命名空间中的变量
    print("局部命名空间中的 a :", a)

foo()
print("全局命名空间中的 a :", a)

上述示例先定义了一个全局变量 a,然后在 foo 函数中重新定义了一个局部变量 a,最后输出两个变量。运行结果如下:

局部命名空间中的 a : 5
全局命名空间中的 a : 10

变量

Python 中的变量是一个可以改变的标识符,它代表了一个内存地址,指向存储在此地址处的值。

动态类型变量

Python 中的变量是动态类型的,这意味着它们的类型在运行时根据值动态推断。变量的类型可以随时更改,而不需要提前声明它的类型。

以下示例在运行时演示了变量的动态类型:

a = 10
print(a, type(a))  # 输出 10 <class 'int'>

a = "hello"
print(a, type(a))  # 输出 hello <class 'str'>

上面的代码演示了变量 a 的类型可以从整数变为字符串,这是动态类型变量的一种特性。

变量赋值

Python 中的变量赋值操作并不是将一个值复制到一个变量中,而是将这个变量绑定到一个对象(值的引用)。因此,当一个变量被赋予一个新的值时,它实际上是引用了一个新的对象地址。

以下示例演示了变量赋值的特性:

a = [1, 2, 3]  # 变量 a 引用了一个列表对象
b = a  # 变量 b 引用了与变量 a 相同的对象地址
b.append(4)  # 修改变量 b 引用的对象

print("变量 a 引用的对象:", a)
print("变量 b 引用的对象:", b)

上述代码中,变量 ab 分别引用了相同的列表对象。当修改变量 b 引用的对象时,变量 a 引用的列表对象也会发生变化。运行结果如下:

变量 a 引用的对象: [1, 2, 3, 4]
变量 b 引用的对象: [1, 2, 3, 4]

范围

Python 中的范围指的是变量的可见性。Python 中的范围可以分为四种:内置作用域、全局作用域、局部作用域和闭包作用域。

内置作用域

内置作用域是全局的范围。Python 解释器在执行代码之前会构建内置作用域,其中包含所有内置函数和变量。这些函数和变量可以在程序中的任何位置访问。

以下示例展示了内置作用域中的变量和函数:

import builtins

dir(builtins)  # 查看所有内置函数和变量

全局作用域

全局作用域是在模块顶部定义的变量和函数的范围。全局作用域对于整个模块都是可见的。

以下示例演示了全局范围:

a = 10  # 全局变量

def func():
    print("a 的值是:", a)

func()  # 输出 a 的值是:10

局部作用域

局部作用域是函数中定义的变量和函数的范围。只有在函数内部定义的变量可以访问该函数。局部作用域可以包含内置作用域和全局作用域。

以下示例演示了局部作用域:

def func():
    b = 5  # 局部变量
    print("在函数中的 b :", b)

func()  # 输出在函数中的 b :5

print(b)  # 报错:NameError: name 'b' is not defined

在上述代码中,变量 b 是一个局部变量,只能在函数内部访问。在函数之外访问变量 b 将引发 NameError 错误。

闭包作用域

闭包作用域是嵌套函数中的范围。如果内部函数引用了外部函数定义的变量,则该变量将被包含在闭包作用域中。

以下示例演示了闭包作用域:

def outer_func(a):
    def inner_func():
        print("在内部函数中的 a :", a)

    return inner_func

new_func = outer_func(10)
new_func()  # 输出在内部函数中的 a :10

在上述代码中,函数 outer_func 返回内部函数 inner_func 的引用。该函数引用并打印了变量 a,该变量由外部函数 outer_func 定义。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python 中的命名空间、变量和范围 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 手把手教你用python抢票回家过年(代码简单)

    下面是详细的攻略: 手把手教你用Python抢票回家过年 在Python中,我们可以使用requests和BeautifulSoup模块实现抢票功能。本文将手把手教你用Python抢票回家过年的过程,并提供两个示例说明。 实现过程 在实现抢票功能的过程中,我们需要模拟浏览器发送请求,并解析返回的HTML页面。下面是一个简单的示例代码: import requ…

    python 2023年5月14日
    00
  • Python Markdown 的“TOC”类中的编号列表

    【问题标题】:Numbered List in a `TOC` Class by Python MarkdownPython Markdown 的“TOC”类中的编号列表 【发布时间】:2023-04-03 07:25:02 【问题描述】: 我使用 Python Markdown 生成一个 HTML 文档。目录嵌入在 toc 类中。 我希望列表是数字: 1.…

    Python开发 2023年4月8日
    00
  • python正则表达式爬取猫眼电影top100

    下面是详细的攻略: Python正则表达式爬取猫眼电影Top100 在本文中,我们将使用Python正则表达式爬取猫眼电影Top100的电影信息。我们将使用Python的requests库发送HTTP请求,然后使用正则表达式从HTML页面中提取电影信息。 爬取猫眼电影Top100 首先,我们需要使用Python的requests库发送HTTP请求,获取猫眼电…

    python 2023年5月14日
    00
  • Python中八种数据导入方法总结

    下面我来详细讲解一下“Python中八种数据导入方法总结”的完整实例教程。 介绍 数据导入是数据分析的第一步,Python中有多种数据导入方法,本文将总结Python中的八种常用数据导入方法,并通过示例演示其使用。 方法一:使用read_csv()函数读取CSV文件 CSV文件是一种常见的数据格式,使用pandas库的read_csv()函数可以快速读取CS…

    python 2023年5月13日
    00
  • DES加密解密算法之python实现版(图文并茂)

    下面是详细讲解“DES加密解密算法之Python实现版(图文并茂)”的完整攻略,包含两个示例说明。 DES加密解密算法简介 DES加密解密算法是一种对称密钥加密算法,它使用相同的密钥进行加密和解密。该算法使用64位密钥和64位数据块,将数据块分成16个子块,并对每个子块进行加密。DES算法已经被广泛使用,但是由于其密钥长度较短,易受到暴力破解攻击。 DES加…

    python 2023年5月14日
    00
  • 100行Python代码实现自动抢火车票(附源码)

    讲解“100行Python代码实现自动抢火车票(附源码)”的完整攻略如下: 项目简介 该项目是一个基于Python的火车票抢购脚本,仅需100行代码便可实现自动购票。 必备工具 Python 3.x Chrome浏览器 Chrome浏览器对应版本的chromedriver 项目代码架构 import datetime from splinter.browse…

    python 2023年5月19日
    00
  • Python包资源下载路径报404解决方案

    下面是“Python包资源下载路径报404解决方案”的完整攻略: 问题描述 在使用Python工具或库时,有时候会遇到下载资源报错的情况。特别是当你使用pip等包管理工具下载某个包的时候,可能会出现“404 Not Found”的错误提示,导致下载失败。 这种情况通常是由于下载的资源链接过期或者不正确所致。解决方案需要针对具体情况进行调整。 解决方案 针对“…

    python 2023年6月13日
    00
  • 3分钟学会一个Python小技巧

    下面我将详细讲解“3分钟学会一个Python小技巧”的完整攻略,攻略如下: 1. 确认目标 首先,我们需要明确自己的学习目标。Python是一门广泛应用于各行各业的语言,如何选择适合自己的技巧,需要先明确自己的应用场景。 例如,如果我们需要在Python中处理大型数据集,那么我们可以学习使用numpy库进行高效的数据处理。 2. 寻找资料 在确定自己的学习目…

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