Python学习基础笔记十五——命名空间和作用域

news2024/11/25 12:33:01

从Python解释器开始执行之后,就在内存中开辟了一个空间。

每当遇到一个变量的时候,就把变量名和值的对应关系记录下来。

但是当遇到函数定义的时候解释器只是象征性地将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑,解释器不关心的。

等执行到函数调用的时候,Python解释器会再开辟一块内存来存储这个函数的内容,这个时候,才关注函数里面有哪些东西,而函数中的变量会存储在新开辟出来的内存中。函数中的变量只能在函数的内部使用,并且会随着函数执行完毕,这块内存中的所有内容也会被清空。

那么,这个“存放名字和值的关系”的空间起了一个名字——名字空间。

代码在运行开始的时候,创建的命名空间叫全局命名空间,在函数运行中开辟的临时空间叫局部命名空间。

命令空间和作用域:

内置命名空间:

1)Python解释器一启动就可以使用的名字存储在内置命名空间中的。

2)内置的名字在启动解释器的时候被加载到内存里。

全局命名空间:

1)是在程序从上到下被执行的过程中依次加载进内存的。

2)放置了我们设置的所有变量名和函数名。

局部命名空间:

1)就是函数内部定义的名字。

2)当调用函数的时候,才会产生这个名字的命名空间。

内置命名空间:Python解释器

全局命名空间:我们写的代码,但不包括函数中的代码

局部命名空间:函数

在局部:可以使用全局、内置命名空间的名字。

在全局:可以使用内置命名空间的名字,但是不能使用局部命名空间的名字。

在内置:不可以使用局部和全局明空的名字的。

def func()
    a = 1

func()

print(a)   # 在全局是不能调到a的值

加载顺序:

内置命名空间(在程序运行前加载)、全局命名空间(程序运行中,从上到下加载)、局部命名空间(程序运行中,调用才会加载)

取值:

在局部调用:局部命名空间->全局命名空间->内置命名空间

在全局调用:全局命名空间->内置命名空间

示例1:

x = 1


def func(x):
    print(x)


func(10)

print(x)

结果:

1)正常情况下,直接使用内置的名字;

2)当我们在全局定义了和内置名字空间中同名的名字的时候,会使用全局的名字;

3)当当前命名空间有的话,就不再找上一级要了;

4)如果当前命名空间没有,就找上一级要,上一级没有,就再找上一级,如果内置的命名空间没有,就直接报错;

5)多个函数应该拥有多个独立的局部名字空间,不相互干扰。

作用域:就是作用范围。

全局作用域:包含了内置命名空间、全局命名空间,在整个文件的任意位置都能被引用、全局有效。

局部作用域:局部命名空间,只能在局部范围内生效。

global 关键字:

a = 1


def func():
    global a  # 声明全局变量
    a += 1


func()
func()

print(a)

说明:对于不可变数据类型,在局部作用域可以查看到全局作用域中的变量。

但是不能直接修改,如果需要修改,需要在程序的开头添加global声明。

如果在局部函数内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效。

我们看下globals()和locals(),两个方法:

a = 1
b = 2


def func():
    x = "aaa"
    y = "bbb"
    print(locals())


func()
print(globals())

结果:

C:\CodeProjects\PythonProjects\s9\venv\Scripts\python.exe C:\CodeProjects\PythonProjects\s9\day2\01homework.py 
{'x': 'aaa', 'y': 'bbb'}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000024764E1FF70>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\CodeProjects\\PythonProjects\\s9\\day2\\01homework.py', '__cached__': None, 'a': 1, 'b': 2, 'func': <function func at 0x0000024764DB3E20>}

进程已结束,退出代码0

在实践中,尽量少使用global关键字。

对全局变量要尽量少用,或者不用。

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

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

相关文章

Vue 插槽(slot)使用

1 为什么使用slot 组件的插槽 组件的插槽是为了让我们封装的组件更加具有扩展性。 让使用者可以决定组件内部一些内容到底展示了什么。 举例&#xff1a; 移动开发中&#xff0c;几乎每个页面都有导航栏 导航栏我们会分装成一个插件&#xff0c;比如nav-bar组件 一旦有了…

vue父子组件间数据的双向绑定

在vue中数据的流向通常是单向的&#xff0c;但是实际开发中&#xff0c;存在父子组件都需要对父组件值进行更新的情况&#xff0c;vue提供了两种方法实现数据的双向绑定&#xff1a; 1、使用v-model指令 在父组件上 v-model 会利用子组件名为 value 的 prop 和名为 input 的…

第5 部分 EIGRP

目录 5.1 EIGRP 概述 5.2 实验1&#xff1a;EIGRP 基本配置 1. 实验目的 2. 实验拓扑 3. 实验步骤 4. 实验调试 &#xff08;1&#xff09;show ip route &#xff08;2&#xff09;show ip protocols​编辑 &#xff08;3&#xff09;show ip eigrp neighbors &#…

[激光原理与应用-31]:典型激光器 -3- 光纤激光器

目录 第1章 光纤激光器概述 1.1 什么是光纤激光器 1.2 应用 1.3 光纤激光器的结构组成 1.4 特点 1.5 优势 第2章 光纤激光器的类型 2.1 按照光纤材料的种类进行分类 2.2 按增益介质分类为&#xff1a; 2.3 按谐振腔结构分类 2.4 按光纤结构分类 2.5 按输出激光特性…

基于 ARM + FPGA 的 EtherCAT 主站设计及实现

为解决实时工业以太网协议 EtherCAT 应用于嵌入式主站控制器所产生的实时性和稳定性等问题&#xff0c;首先研究了 EtherCAT 主站控制器在 EtherCAT 网络控制系统中的功能需求&#xff0c;分析并提出了实现嵌入式 EtherCAT 主站的架构&#xff0c;然后针对上述架构设计了基于 A…

补知识点:Feign、Nacos配置中心(命名空间、配置分组)

一、Feign的应用 和前面的Feign笔记是一样的&#xff0c;不过这里更深刻的理解一下 使用Feign的整体步骤就分为以下几个步骤&#xff1a; 1、引入open-feign依赖坐标 2、编写一个接口&#xff0c;告诉springCloud这个接口需要调用远程服务 3、在启动类当中开启远程调用功能注解…

[附源码]计算机毕业设计JAVA学生宿舍管理系统

[附源码]计算机毕业设计JAVA学生宿舍管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

06_openstack之创建云主机和常见错误

目录 一、环境准备 二、创建云主机 三、常见错误 1、创建云主机时&#xff0c;主机状态显示“错误” 2、云主机控制台无法访问&#xff0c;报错1006 3、云主机创建错误&#xff0c;提示“找不到有效主机&#xff0c;原因是没有足够的主机可用” 一、环境准备 部署openst…

什么样的架构师修炼之道文档,能帮助大家修炼成为出色的架构师?

前言 时间飞逝&#xff0c;转眼间毕业七年多&#xff0c;从事 Java 开发也六年了。我在想&#xff0c;也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Ja…

Java基于springboot+vue的汽车销售购物商城系统

前言背景 随着我国的经济发展&#xff0c;人们的生活水平也有了一定程度的提高&#xff0c;汽车也逐渐由以前的奢侈品变成了很多人必须的代步工具&#xff0c;然而我国的很多汽车销售企业都没有成套的管理系统&#xff0c;通过我在假期的实习和一定时间的调查研究发现了传统的…

[附源码]Python计算机毕业设计Django教务管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Js逆向教程18-l参数分解

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; Js逆向教程18-l参数分解 一、l参数分解 可以看到l是一个大数组。 里面有很多字节码 V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIA…

【Java基础】· 集合习题详解

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

如何测试 LoRaWAN 全球频段

To be a sailor of the world, bound for all ports. 做世界的水手&#xff0c;游遍所有的港口。 背景 自 2015 年 LoRa 联盟创建 LoRaWAN 协议&#xff0c;经过 7 年长跑&#xff0c;到 2022 年国际电信联盟 (ITU) 正式批准 LoRaWAN 作为全球标准: ITU-T Y.4480“广域无线网…

一些并查集的题~~判树,连通,带权

目录 A-Wireless Network B-The Suspects C - How Many Tables D - How Many Answers Are Wrong G - Supermarket L - 小希的迷宫 M - Is It A Tree&#xff1f; J - A Bug‘s Life E - 食物链 A-Wireless Network POJ - 2236 ​ 翻译&#xff1a; 东南亚发生了地震…

Android Camera性能分析 - 第27讲 Request Latency

​ 本讲是Android Camera性能分析专题的第27讲 ​&#xff0c;我们介绍CameraServer Request Latency&#xff0c;包括如下内容&#xff1a; Request Latency是什么Request Latency配置Request Latency实战 视频在线观看&#xff1a; 极客笔记&#xff1a;极客笔记在线课程加…

基于proe的阀体零件的机械加工工艺及夹具设计

目 录 摘 要 I Abstract II 1 绪论 1 1.1选题背景及意义 1 1.2发展现状 1 1.3研究主要内容 3 2 夹具的概述 4 2.1 夹具的发展趋势 4 2.2 夹具的组成 5 2.3 夹具的作用与意义 6 3 PROE设计环境的简述 8 3.1 PROE设计软件介绍 8 3.2 PRO/E的CAM功能应用 8 3.3 设计任务及要求 9 3…

sscanf与sprintf函数

本期介绍&#x1f356; 主要介绍&#xff1a;scanf()、printf()、fscanf()、fprintf()、sscanf()、sprintf()这三对输入/输出函数的区别&#xff0c;而且详细讲解了sscanf()、sprintf()这两个函数的应用场景&#x1f440;。 概述&#x1f356; 在C语言的输出和输入库中&#xf…

基于安卓的公司员工考勤系统的设计与实现

目 录 1 绪论 1 1.1 选题背景 1 1.2 研究现状 2 1.3 研究意义 3 1.4 研究内容 3 2 相关的理论和技术 4 2.1 JAVA技术与安卓介绍 4 2.2 Android的开发 5 2.3 Android常用的列表组件 5 2.4 Android所需知识的理解 8 2.4.1 自定义控件 8 2.4.2 进一步说明 10 3 系统分析 12 3.1系统…

生命在于折腾——Fishing软件的编写(易语言)

本篇文章仅用于学习交流&#xff0c;不得用于其他违规用途。 一、钓鱼软件是什么&#xff1f; 钓鱼软件是通常以精心设计的虚假网页引诱用户上当,达到盗取银行账号、信用卡号码等目的,属于违法行为。 钓鱼通常指伪装成银行及电子商务,窃取用户提交的银行帐号、密码等私密信息…