Python进阶(一)名字空间 | 超详细名字空间解析 内置 全局 局部 调试查看

文章目录

  • 1 内置名字空间
  • 2 全局名字空间
  • 3 局部名字空间
  • 4 类名字空间
  • 5 调试查看名字空间
    • 5.1 查看局部名字空间
    • 5.2 查看全局名字空间

在Python中,名字空间(Namespace)是一个用于存储变量名称和它们对应的对象值的容器。名字空间可以看作是一个映射,将变量名映射到相应的对象值。比如申明一个变量a=1,那么在名字空间字典中就会增加一个映射

‘a’ : ‘1’

Python中有几种不同类型的名字空间,主要包括以下几类:

  1. 内置名字空间(Built-in Namespace): 包含Python解释器内置的函数和对象,例如print()len()。这个名字空间在解释器启动时就被创建,是全局范围的,所以大家可以直观感受到print()非常方便,不需要任何的导入import。

  2. 全局名字空间(Global Namespace): 包含在我们的程序文件级别定义的变量和函数。这个名字空间在模块(module)被导入或程序执行时创建,是模块级别的。

  3. 局部名字空间(Local Namespace): 包含在函数内部定义的变量。这个名字空间在函数调用时创建,包含了函数内部的变量,只在函数执行期间存在,函数执行完之后就销毁。

  4. 类名字空间(Class Namespace): 包含类定义中的变量。每个类都有一个类名字空间,用于存储类的变量和方法。

名字空间之间存在层次关系,被称为名字空间链(Namespace Hierarchy)。当使用变量时,解释器会按照一定的顺序搜索名字空间链,以查找变量对应的对象。

名字空间的一个关键特性是它们提供了作用域(Scope)。作用域定义了变量的可见性和生命周期。比如在一个函数内申明的某个变量,在函数外就不能随意访问了,在一个作用域内定义的变量在该作用域内可见,超出作用域范围后就不再可访问。

对每一部分我们聚一些例子

1 内置名字空间

在任意文件内输入

# 内置名字空间
print("Built-in function:", len("example"))

我们测试了print,和len这两个内置名字空间,这两个函数我们没有提前申明,是内置的

len内置函数可以输出字符串的长度

最后输出

Built-in function: 7

内置的往往都是全局的

2 全局名字空间

# 全局名字空间
global_variable = 10def my_function():# 函数内可以访问全局名字空间print("Global variable inside function:", global_variable)my_function()#测试能否正常访问

输出

Global variable inside function:10

在文件开头我们申明了global_variable=10,则在全局名字空间内增添了一个映射,无论是在函数内还是在函数外都可以正常访问全局名字空间的映射

3 局部名字空间

任意文件内输入

def my_function():# 局部名字空间local_variable = 5print("Local variable inside function:", local_variable)my_function()# 尝试访问局部变量会引发 NameError
print("Trying to access local variable outside function:", local_variable)

输出

Local variable inside function: 5
...
NameError: name 'local_variable' is not defined

可见在函数内访问则可以正常输出,函数外访问则会导致引发 NameError

4 类名字空间

class MyClass:class_variable = "Class Variable" # 类变量属于类的名字空间,每一个实例都可以访问def __init__(self, instance_variable):# 实例变量属于实例的名字空间,每一个实例只能访问自己的实例变量self.instance_variable = instance_variabledef print_variables(self):print("Class Variable:", MyClass.class_variable)print("Instance Variable:", self.instance_variable)# 创建类的实例
obj1 = MyClass("Instance Value")
obj1.print_variables()
obj2=MyClass("Instance Value2")
obj2.print_variables()

输出

Class Variable: Class Variable
Instance Variable: Instance Value
Class Variable: Class Variable
Instance Variable: Instance Value2

类变量属于类的名字空间,每一个实例都可以访问

实例变量属于实例的名字空间,每一个实例只能访问自己的实例变量,用self.区分

5 调试查看名字空间

有时候我们需要查看名字空间,方便进行调试

通过locals()函数和global()函数可以获得局部和全局名字空间字典

5.1 查看局部名字空间

def my_function():local_variable = 5print("Local Namespace:", locals())my_function()

输出

Local Namespace: {'local_variable': 5}

5.2 查看全局名字空间

global_variable = 10def my_function():print("Global Namespace:", globals())my_function()

输出

Global Namespace: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020D60796CD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'f:\\BaiduSyncdisk\\Code\\数据处理\\名字空间.py', '__cached__': 
None, 'global_variable': 10, 'my_function': <function my_function at 0x0000020D60BB9C10>}

可以看到输出较为复杂,因为我们在一开始说过,内置的往往都是全局的,所以我们可以看到除了我们自己申明的全局名字如global_variable,my_function,还有很多没申明的,比如name,比如有获得文件目录的 _ _ file _ _全局变量,这些都是内置的

总结来看,Python的名字空间是一个组织和管理变量的机制,确保在程序中能够正确找到和使用变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年华为OD机试真题-密码输入检测-Python-OD统一考试(C卷)

题目描述: 给定用户密码输入流input,输入流中字符<表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。 密码安全要求如下: 1.密码长度>=8; 2.密码至少需要包含1个大写字母; 3.密码至少需要包含1个小…

burp靶场--文件上传

burp靶场–文件上传 https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-web-shell-upload 1.文件上传 1、原理&#xff1a;文件上传漏洞是指Web服务器允许用户将文件上传到其文件系统&#xff0c;而不充分验证文件的名称、类型、…

Midjourney基本使用(极速版)

加入Midjourney社区 首先&#xff0c;我们来创建与Midjourney交互的环境 因为需要利用discord与Midjourney进行交互 因为Midjourney没有自己的网站没有自己的服务器 完全依赖discord作为Midjourney的前端&#xff0c;通过discord&#xff0c;用户才能方便快捷的与Midjourney进行…

《WebKit 技术内幕》之七(2): 渲染基础

2 网页层次和RenderLayer树 2.1 层次和RenderLayer对象 前面章节介绍了网页的层次结构&#xff0c;也就是说网页是可以分层的&#xff0c;这有两点原因&#xff0c;一是为了方便网页开发者开发网页并设置网页的层次&#xff0c;二是为了WebKit处理上的便利&#xff0c;也就是…

Circles of Waiting洛谷黑题题解

Circles of Waiting 题面翻译 在平面直角坐标系上&#xff0c;有一个神奇的点&#xff0c;一开始在 ( 0 , 0 ) (0, 0) (0,0) 。每秒钟这个点都会随机移动&#xff1a;如果它在 ( x , y ) (x, y) (x,y) &#xff0c;下一秒它在 ( x − 1 , y ) (x - 1, y) (x−1,y) 的概率是…

在WIN从零开始在QMUE上添加一块自己的开发板(二)

文章目录 一、前言往期回顾 二、CPU虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子&#xff08;三&#xff09;测试 三、内存虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子测试 参考资料 一、前言 笔者这篇博客…

力扣日记1.21-【回溯算法篇】77. 组合

力扣日记&#xff1a;【回溯算法篇】77. 组合 日期&#xff1a;2023.1.21 参考&#xff1a;代码随想录、力扣 终于结束二叉树了&#xff01;听说回溯篇也是个大头&#xff0c;不知道这一篇得持续多久了…… 77. 组合 题目描述 难度&#xff1a;中等 给定两个整数 n 和 k&#…

LSTM时间序列预测

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;【1】演示&#xff1a;基于LSTM深度学习网络预测时间序列&#xff08;MATLAB工具箱&#xff09;_哔哩哔哩_bilibili % Forecast of time series based on LSTM deep learn…

敏捷测试和DevOpes自动化测试的区别

敏捷测试和DevOps自动化测试在以下方面存在区别&#x1f447; 1️⃣目标 &#x1f388;敏捷测试的主要目标是提供快速的反馈和持续的改进&#xff0c;以便在开发过程中尽早发现和解决问题&#xff0c;从而提高软件的质量和可靠性。 &#x1f308;DevOps自动化测试的目标是提高软…

Java学习笔记(七)——操作数组工具类Arrays

文章目录 ArraysArrays.toString()Arrays.binarySearch()Arrays.copyOf()Arrays.copyOfRange()Arrays.fill()Arrays.sort()升序排序降序排序 Arrays 操作数组的工具类。 Arrays.toString() import java.util.Arrays;public class test40 {public static void main(String[] a…

前端图形视觉、可视化方面面试题

1. Echarts底层支持哪些渲染方式&#xff1f; ECharts 是一款基于 JavaScript 的开源图表库&#xff0c;它提供了丰富的图表类型和交互功能。 ECharts 的底层实现主要依赖于 Canvas 或者 SVG 渲染方式&#xff0c;具体取决于浏览器的支持和配置。 Canvas 渲染&#xff1a; Canv…

【Docker篇】详细讲解容器相关命令

&#x1f38a;专栏【Docker】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f6f8;容器&#x1f339;相关命令&#x1f354;案例⭐创建并运…

第四课:GPT2

文章目录 第四课&#xff1a;GPT21、学习总结&#xff1a;GPT2的学习目标和概念任务调节零样本学习和零短任务迁移 模型结构GPT-2 自注意力掩码实现1- 创建qkv2- 评分3- 合并注意力头4- Projecting 课程ppt及代码地址 2、学习心得&#xff1a;3、经验分享&#xff1a;4、课程反…

AWS 专题学习 P8 (ECS、EKS、Lambda、CloudFront、DynamoDB)

文章目录 什么是 Docker&#xff1f;操作系统上的 DockerDocker 镜像存储Docker vs. Virtual MachinesDocker 入门AWS 中的 Docker Containers Management Amazon ECSEC2 Launch TypeFargate Launch TypeECS 的 IAM RolesLoad Balancer IntegrationsData Volumes (EFS)ECS Serv…

Object.prototype.toString.call个人理解

文章目录 这段代码的常见用处参考文献&#xff1a; 拆分理解1、Object.prototype.toString小问题参考文献&#xff1a; 2、call函数的作用参考文献 3、继续深入一些&#xff08;这部分内容是个人理解&#xff0c;没有明确文献支撑&#xff09; 这段代码的常见用处 Object.prot…

MVC的设计理念

MVC的设计理念 MVC 是一种使用 MVC&#xff08;Model View Controller 模型-视图-控制器&#xff09;设计创建 Web 应用程序的模式&#xff1b; Model&#xff08;数据模型&#xff09;表示应用程序核心&#xff0c; 处理应用程序数据。 View&#xff08;视图&#xff09;显示…

(007)Gradle 打包时拷贝依赖包到 lib

文章目录 引资附录 引资 1.示例代码&#xff1a; /** This file was generated by the Gradle init task.** This project uses Incubating APIs which are subject to change.*/plugins {id javaid maven-publish // id "io.freefair.lombok" version "8.…

easy Exsel导出

目录 一、首先引入依赖 二、然后封装一个VO 三、Controller层 四、Service实现类 引用样式 自适应列宽 自适应行高 五、测试 postman ​编辑 浏览器 异常 分配到这个任务了&#xff0c;写个小demo记录下&#xff0c;具体可参考EasyExcel官方文档 我用的是web上传…

CCC数字钥匙设计【NFC基础】--LPCD相关介绍

关于NFC卡检测&#xff0c;主要可以分成两个步骤&#xff1a; 1、LPCD低功耗检测&#xff0c;唤醒NFC读卡器。 2、唤醒后&#xff0c;NFC读卡器或MCU控制器轮询Type A、Type B、Type F、Type V&#xff08;ISO15693&#xff09;等卡类型。 本文主要介绍LPCD相关功能&#xff…

设备管理——WinCC 给你神助功

要实现“设备高效”&#xff0c;就必须“管之有道”&#xff0c;来自设备层的数据支撑将是必不可少的&#xff0c;提高设备效能的2个关键在于降低平时停机时间 (MDT) 和提高平均无故障时间 (MTBF)。通常来说&#xff0c;设备维护可大致可分为三个层次&#xff1a;纠正性维护&am…