详解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中计算三角函数之cos()方法的使用简介

    当我们在Python中进行三角函数计算时,可以使用cos()方法来计算一个数的余弦值。下面就是Python中计算三角函数之cos()方法的使用简介: 简介 cos()是Python中计算余弦函数的方法,它的使用方法如下: import math math.cos(x) 其中,x是要计算余弦值的角度,单位是弧度。返回值是该角度的余弦值。 示例1:计算90度的余…

    python 2023年6月3日
    00
  • Python时间整数问题

    【问题标题】:Python time integer issuePython时间整数问题 【发布时间】:2023-04-04 03:14:01 【问题描述】: 我正在尝试计算“当时”和“现在”之间的时间差。我改变了格式,以便更好地比较它(我不需要秒或纳秒等) ‘then’ 时间来自加密,并且正在被解析以进行比较,这就是我担心的错误。 def decrypt_…

    Python开发 2023年4月6日
    00
  • python 爬取影视网站下载链接

    关于“python 爬取影视网站下载链接”的完整攻略,我为你提供如下的步骤: 1. 确认目标网站和内容 首先,需要明确你要爬取的是哪个影视网站、以及你要下载哪些类型的视频内容。为了方便说明,我们以某个模拟网站为例,该网站中有多个视频栏目,其中每个栏目都有多个视频、每个视频都有多个下载链接。 2. 分析页面结构 我们要使用 Python 爬虫,就需要先找到目标…

    python 2023年6月2日
    00
  • Django migrate报错的解决方案

    下面我将为您详细讲解Django migrate报错的解决方案。 1. 确认数据库连接是否正常 Django migrate报错的常见原因之一是数据库连接出现问题。在运行Django migrate命令前,我们需要先确认数据库的连接是否正常。可以通过以下三个步骤来确认数据库的连接是否正常。 (1)确认数据库的配置文件settings.py是否正确设置,其中包…

    python 2023年5月13日
    00
  • Python使用邻接矩阵实现图及Dijkstra算法问题

    Python使用邻接矩阵实现图及Dijkstra算法问题 介绍 图是一种常用的数据结构,它由节点和边组成。在实际应用中,我们经常需要对图进行遍历、搜索和最短等操作。本文将介绍如何使用Python使用邻接矩阵实现图,并使用Dijkstra算法求解最短路径问题。 邻接矩阵 邻接矩阵是一种表示图的常用方法,它使用一个二维数组来表示节点之间的连接关系。在邻接矩阵中,…

    python 2023年5月14日
    00
  • 安装Python后你的电脑多了哪些东西?

    Python安装完成之后,我们的计算机都多出了哪些东西? 我们在计算机搜索框中搜索“python”,会显示出python相关的程序。可以看到,我们的计算机会多出4个应用程序,如下: 接下来介绍下这4个程序的作用。 IDLE (Python 3.11 64-bit) IDLE是Python官方的集成开发环境。我们可以在开发环境中编写、运行我们的Python代码…

    2022年11月2日
    00
  • python中列表的含义及用法

    Python中的列表(List)是一种非常常用且灵活的数据类型,用于存储一组有序数据。在本篇攻略中,我们将介绍Python中列表的含义及用法,以及常用的操作方法和技巧。 什么是列表? Python中的列表是一种有序的序列,用一对方括号“[]”来表示,可以存储不同类型的数据,例如整型、浮点型、字符串等。列表中的每个元素都有一个对应的索引,可以通过索引来访问列表…

    python 2023年5月13日
    00
  • 使用pytorch进行张量计算、自动求导和神经网络构建功能

    下面是使用PyTorch进行张量计算、自动求导和神经网络构建的完整攻略。 张量计算 张量 在PyTorch中,张量(tensor)是一种类似于多维数组的数据结构,可以用来表示各种数据类型(例如浮点数、整数、字节)。张量可以在CPU或GPU上进行操作,从而实现高效的计算。 张量的创建 可以使用PyTorch的Tensor类来创建张量。例如,可以创建一个包含5个…

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