第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)

news2025/2/23 16:49:31

什么是命名空间:

命名空间是一个为 Python 中的每个对象都有唯一名称的系统。对象可能是变量或方法。Python 本身以 Python 字典的形式维护一个命名空间。让我们看一个例子,计算机中的目录文件系统结构。不用说,可以有多个目录,每个目录中都有一个同名的文件。但是,只要指定文件的绝对路径,就可以根据需要定向到该文件。 
实时的例子,命名空间的作用就像一个姓氏。人们可能在班级中找不到一个“Alice”,可能有多个“Alice”,但当你特别要求“Alice Lee”或“Alice Clark”(带有姓氏)时,只会有一个(暂时不要)不要认为多个学生的名字和姓氏都相同)。
类似地,Python 解释器根据命名空间来理解尝试在代码中指向的确切方法或变量。因此,单词本身的划分提供了更多的信息。它的名称(表示名称,唯一标识符)+空间(表示与范围相关的内容)。这里,名称可以是任何 Python 方法或变量,并且空间取决于尝试访问变量或方法的位置。
 

命名空间的类型:
 

当Python解释器单独运行而没有任何用户定义的模块、方法、类等时。一些函数如print()、id()始终存在,这些是内置的命名空间。当用户创建模块时,会创建全局命名空间,稍后创建本地函数会创建本地命名空间。内置命名空间包含全局命名空间,全局命名空间包含本地命名空间
 

命名空间的生命周期:
 

命名空间的生命周期取决于对象的范围,如果对象的范围结束,则该命名空间的生命周期也结束。因此,不可能从外部命名空间访问内部命名空间的对象。
 

例子: 

  • Python3
    # var1 在全局命名空间中
    var1 = 5
    
    def some_func():
    
    	# var2 在局部命名空间中
    	var2 = 6
    
    	def some_inner_func():
    
    		# var3 在嵌套的局部命名空间中
    		var3 = 7
    

    如下图所示,相同的对象名称可以出现在多个命名空间中,因为相同名称之间的隔离是由其命名空间维护的。

但在某些情况下,人们可能只对更新或处理全局变量感兴趣,如以下示例所示,应将其显式标记为全局变量并进行更新或处理。请注意,“count = count +1”行引用了全局变量,因此使用了全局变量,但请将其与写入“count = 1”的同一行进行比较。那么根据作用域规则,绝对需要“全局计数”行。

  • Python3
    # Python程序处理
    # 全局变量
    
    count = 5  # 定义全局变量count并赋值为5
    
    def some_method():
    	global count  # 使用global关键字声明要在函数中使用的全局变量count
    	count = count + 1  # 增加count的值
    	print(count)
    
    some_method()  # 调用函数some_method(),并打印count的值
    
    

    这段代码定义了一个全局变量count并赋值为5。然后,定义了一个名为some_method的函数,在函数内部使用global关键字声明要在函数中使用的全局变量count,并对其进行加1操作。最后,调用函数some_method(),打印count的值。

输出: 

6

Python 中对象的范围:
 

范围是指可访问特定 Python 对象的编码区域。因此,人们无法从代码的任何位置访问任何特定对象,访问必须得到对象范围的允许。
让我们举个例子来详细了解一下: 
 

示例1: 

  • Python3
    # Python程序展示
    # 对象的作用域
    
    def some_func():
    	print("在some_func函数内部")
    	def some_inner_func():
    		var = 10
    		print("在内部函数中,var的值为:", var)
    	some_inner_func()
    	print("尝试从外部函数打印var: ", var)
    some_func()
    

    这段代码定义了一个名为some_func的函数,在函数内部定义了另一个名为some_inner_func的函数。在some_inner_func内部,定义了一个局部变量var并赋值为10,然后打印了var的值。但是,在some_func函数的外部尝试打印var时,会引发NameError异常,因为var在外部函数的作用域之外不可见。

输出: 

在some_func函数内部
在内部函数中,var的值为: 10
Traceback (most recent call last):
  File "your_script.py", line 8, in <module>
    some_func()
  File "your_script.py", line 6, in some_func
    print("尝试从外部函数打印var: ", var)
NameError: name 'var' is not defined

这是代码的执行输出。首先,调用some_func函数,它打印了"在some_func函数内部"。然后,在some_func内部调用了some_inner_func,它打印了"在内部函数中,var的值为: 10"。

但是,在尝试从外部函数some_func打印var时,引发了NameError异常,因为var不在外部函数的作用域内可见。所以,最后一行代码无法执行。

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

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

相关文章

关于Allegro17.4 3d模型大小不匹配问题解决

文章目录 问题概述问题原因解决办法 问题概述 Allegro 17.4版本采用 3D Canvas 工具进行3D模型的映射&#xff0c;映射后&#xff0c;无需保存任何映射文件&#xff0c;只要指定好step文件路径&#xff0c;即可将模型映射信息保存在pcb封装文件中&#xff0c;方便快捷。映射流…

idea集成tomcat(Smart Tomcate插件安装)

当我们在 tomcat 上部署好一个 webapp 后&#xff0c;如果我们要修改代码&#xff0c;就需要重新进行打包和部署&#xff0c;但往往在工作中是需要频繁修改代码&#xff0c;然后再查看成果的&#xff0c;就需要反复的进行打包和部署的过程&#xff0c;这是很麻烦的 通过 Smart …

WebGIS开发教程:Openlayers常见功能实现

Openlayers的核心 Openlayers如何实现交互式绘制 创建矢量图层和矢量数据源 - 创建画布 创建画笔 激活画笔 如何加载天地图,设置中心点和显示级别 const TianDiMap_cva new ol.layer.Tile({ title:"天地图矢量注记图层", source:new ol.source.XYZ({ url:htt…

企业诊断屋:二手车交易平台 APP 如何用 AB 测试赋能业务

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 2023年汽车行业新车市场低靡&#xff0c;由新车降价引发的车辆价格波动很快传导到二手车市场&#xff0c;二手车的交易也受到了冲击&#xff0c;收车验车更加谨慎&a…

IT行业未来三年最靠谱的职业方向选择,一定要看完!

近些年“互联网”模式不断发展&#xff0c;以信息化带动传统产业的升级中&#xff0c;社会对IT互联网人才的需求量也在不断增加。随着AI、大数据、人工智能、云计算的兴起&#xff0c;也为对新兴事物充满兴趣热爱和探索的年轻人带来了更多的就业机会&#xff0c;在很大程度上激…

【python】系列之item.taobao 获取商品详情API接口调用

item.taobao 获取商品详情API接口调用 API从技术角度来说就是应用程序编程接口。通过API我们可以直接获取一些我们需要的数据结果&#xff0c;而不需要自己编写相应的程序&#xff0c;有点类似模块化调用函数&#xff0c;大大加快了我们编程的速度。当然这个数据传输是需要网络…

【Graph Net学习】DeepWalk/Node2Vec实现Graph Embedding

一、简介 本文主要通过代码实战介绍基础的两种图嵌入方式DeepWalk、Node2Vec。 DeepWalk&#xff08;KDD 2014&#xff09;&#xff1a;首个影响至今的图的Embedding算法&#xff0c;DeepWalk算法是一种用于学习节点表示的方法&#xff0c;常用于网络图中的节点的嵌入表示。 模…

桌面版Teams,打开后一直卡在“正在加载Microsoft Teams”界面

清除Teams缓存的解决办法&#xff1a; 1.完全退出Teams桌面客户端。您可以通过右击桌面右下角的Teams图标并选择“退出”&#xff1b;或在任务管理器中完全结束Teams进程。 2.请至文件浏览器&#xff0c;并输入%appdata%\Microsoft\teams&#xff1b;或前往System (C:) > Us…

解锁前端Vue3宝藏级资料 第五章 Vue 组件应用 2 ( Emit )

本章带领大家理解组件、props、emits、slots、providers/injects&#xff0c;Vue 插件 等Vue组件使用的基础知识。 第一章 Vue3项目创建 1 Vue CLI 创建vue项目 第一章 Vue3项目创建 2 使用 Webpack 5 搭建 vue项目 第一章 Vue3项目创建 3 Vite 创建 vue项目 第二章 Vue3 基础语…

Denoising diffusion implicit models 阅读笔记

Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本&#xff0c;需要迭代多次&#xff0c;速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了加速采样过程&#xff0c;减少迭代的次数&#xff0c;并且要求DDIM可以复用DDPM训练的网…

浅谈xss

XSS 简介 XSS,全称Cross Site Scripting,即跨站脚本攻击,是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。需要强调的是,XSS不仅…

vue项目嵌套安卓壳子打包apk

1.确保你的项目可以正常运行 2.vue.config.js publicPath 添加一个 publicPath:./, 3.需要下载一个HBuilder X编辑器 下载地址&#xff1a;HBuilderX-高效极客技巧 4.新建一个项目 选择5App 创建完成之后删除掉红框内的文件 只保留一个manifest.json 5.把自己要变成ap…

iTOP-RK3588开发板更新RKNN模型

RKNN 是 Rockchip NPU 平台(也就是开发板)使用的模型类型&#xff0c;是以.rknn 结尾的模型文件。 RKNN SDK 提 供 的 demo 程 序 中 默 认 自 带 了 RKNN 模 型 &#xff0c; 在 RKNN SDK 的 examples/rknn_yolov5_demo/model/RK3588/目录下&#xff0c;如下图所示&#xff…

远程拷贝Windows上的文件到Linux指定的文件夹

Linux系统电脑之间使用scp命令拷贝十分方便&#xff0c;但是对于windows和Linux之间的远程拷贝就没那么方便&#xff0c;特别是对于车载嵌入式的开发人员&#xff0c;很多软件或者license没有对应的Linux版本&#xff0c;需要远程刷写软件来回切换十分不方便&#xff0c;今天介…

C++ Primer Plus第八章笔记

内联函数 编译过程的目标是可执行程序&#xff08;由一组机器语言指令组成&#xff09;。运行程序时&#xff0c;操作系统将指令载入到计算机内存中&#xff0c;则每条指令都有其特定的内存地址。 内联函数的编译代码与其它程序代码内联&#xff0c;编译器就使用相应的函数代…

亚运之城:杭州的搞钱之王 首富都得靠边站

作者&#xff1a;积溪 简评&#xff1a;这届亚运会&#xff0c;杭州成了显眼包&#xff0c;也卷成了蚊香&#xff0c;这背后杭州的搞钱实力&#xff0c;究竟有多牛&#xff1f;#杭州亚运会 #马云 #阿里 手机可以“打”公交 10分钟就能到 还只要1块钱&#xff1f; 这届亚运…

数据分析方法-对比分析和用户画像(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

App Store上线规范及流程

上线一个应用到 App Store 需要遵循苹果的规范和流程&#xff0c;以确保应用的质量和安全性。以下是上线应用到 App Store 的一般规范和流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 开发和…

基于微信小程序的学生签到系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

ETHERCAT转ETHERCAT协议网关

JM-ECAT-ECAT 产品介绍 JM-ECAT-ECAT是自主研发的一款ETHERCAT从站功能的通讯网关。该产品主要功能是将2个ETHERCAT网络连接起来。 本网关连接到ETHERCAT总线中做为从站使用。 产品参数 技术参数 l 网关做为ETHERCAT网络的从站&#xff0c;可以连接倍福、欧姆龙、基恩士等厂…