python全局名称空间_python之名称空间知识点整理
命名空间的定义
python解释器在加载py文件时在内存中开辟的空间,该空间使用字典来存放对象与值。字典的键保存了py文件中的变量名、方法名、类名及其他环境变量名,对应的值保存了该对象的值(或内存地址或None)。
print(globals())
out:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020FF499EFD0>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'd:/Python/函数/关于函数的案例.py', '__cached__': None}
命名空间的分类
全局(Global names)名称空间
python解释器开始加载py文件时创造的名称空间,存储的对象包括全局变量名、方法名、类名及其他环境变量。
全局名称空间仅有一个。
局部(Local names)名称空间
python解释器在方法、类等执行时才会创建的临时名称空间,存储的对象是该方法或类内部的变量名、方法名等。
局部名称空间可以有多个,方法执行时创建结束后销毁。
方法内可定义方法:外层方法->外层局部名称空间;内层方法->内层局部名称空间。
内置(Built-in names)名称空间
python解释器用来保存内部模块builtins中的方法。
内置名称空间仅有一个。
命名空间的加载顺序
内置(Built-in)名称空间
全局(global)名称空间
局部(local)名称空间
取值顺序->LEGB原则
调用对象时python会按如下顺序查找:
局部(local)名称空间
非本地(Enclosing)名称空间
全局(Global)名称空间
内置(Built-in)名称空间
经过以上四步未能找到该对象名字时就会报错。
在同一个名称空间下,名字和对象是一 一对应的。在不同名称空间下,一个名字可以存在三个对象:局部对象、非本地对象、全局对象,python会按照LEGB原则就近查找。
text = 123
def out():
text = 456
print('out',text)
def inner():
text = 789
print('inner',text)
inner()
out()
print(text)
out:
out 456
inner 789
123
关于Global和nonlocal
在内层方法中可以直接引用全局(Global)名称空间和非本地(Enclosing)名称空间中的对象。
text1 = '全局名称空间变量'
def out():
text2 = '外层名称空间变量'
def inner():
print(text1)
print(text2)
inner()
out()
out:
全局名称空间变量
外层名称空间变量
在内层方法修改全局(Global)名称空间和非本地(Enclosing)名称空间中的对象会报错。
text1 = '全局名称空间变量'
def out():
text2 = '外层名称空间变量'
def inner():
# UnboundLocalError: local variable 'text1' referenced before assignment
text1 += '在内层打印'
# UnboundLocalError: local variable 'text2' referenced before assignment
text2 += '在内层打印'
print(text1)
print(text2)
inner()
out()
如果确实需要修改,必须先声明,然后才能修改。
text1 = '全局名称空间变量'
def out():
text2 = '外层名称空间变量'
def inner():
global text1
nonlocal text2
text1 += '在内层修改'
text2 += '在内层修改'
print(text1)
print(text2)
inner()
out()
out:
全局名称空间变量在内层修改
外层名称空间变量在内层修改
python全局名称空间_python之名称空间知识点整理相关推荐
- python全局解释锁_Python GIL 全局解释性锁介绍
什么是GIL GIL (Global Interpreter Lock),全局解释性锁,它上锁的对象是解释器,而Python代码的运行需要解释器进行解释成字节码并提供虚拟机运行,这么大粒度的锁意味着, ...
- python 全局解释器锁_python全局解释器锁(GIL)
什么是全局解释器锁GIL 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译 ...
- sql和python还有c语言_Python语言之原生sql整理
本文主要向大家介绍了Python语言之原生sql整理,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. mysql -uroot -p #登录mysql命令 password: #输 ...
- 学python的注意点_python学习入门细节知识点
python入门细节 相除后的类型 type(2/2) float type(2//2) int 双斜杠是整除,出来的类型是int.单斜杠的出来的是float类型. 进制表示和转换 进制表示: 二进制 ...
- python launcher怎么使用_python的launcher用法知识点总结
python的launcher用法知识点总结,版本,启动器,文件,范围内,适用于 python的launcher用法知识点总结 易采站长站,站长之家为您整理了python的launcher用法知识点总 ...
- python write函数换行_python中文件的知识点总结
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- python开发ps插件_python +ps 三方面库整理
-------------------------------------------端口进程相关------------------------------------------------ cp ...
- python元组的概念_python元组的概念知识点
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- python中frame用法_python操作dataFrame基本知识点
1)查看DataFrame数据及属性 df_obj = DataFrame() #创建DataFrame对象 df_obj.dtypes #查看各行的数据格式 df_obj['列名'].astype( ...
最新文章
- OpenStack 虚拟机的磁盘文件类型与存储方式
- 参数处理:#{}与${}取值的区别
- CentOS7.0下Hadoop2.7.3的集群搭建
- Django-C003-视图
- 利用预渲染加速iOS设备的图像显示
- ehcache 在web项目中使用
- 初秋最佳运动蓝牙耳机推荐,100-500这几款防水蓝牙耳机可以试试
- Skype不能打开解决记录(win7)
- 情感分析textblob--英文分析
- vue项目路由 Navigating to current location (/xxxx) is not allowed
- 毕业设计之 --- 基于java web的物流信息网的设计与实现
- mysql中utf8和utf8mb4的详解用法与区别
- tabLayout+viewPager+fragment,当tab数目较少,能一屏展示时
- Appium多线程自动化----IOS
- linux、windows双系统系统盘制作及安装
- 排序算法:堆排序(Python)
- 监听页面关闭和刷新的总结
- 手机软件开发入门 - 中国象棋(2)090311
- 打包过程中出现failed to create process.
- 灵车上天、骨灰种树,科技公司开始操心你的身后事了!
热门文章
- TensorFlow Lite 正式发布,谷歌移动端深度学习框架
- Flume实操(三)【实时读取目录文件到HDFS案例】
- Spark _15 _广播变量和累加器
- leetcode 775. Global and Local Inversions | 775. 全局倒置与局部倒置(Java)
- Why is it recommended to create clusters with odd number of nodes? | 为什么集群节点建议奇数个?
- Java如何查看死锁?
- Spring之装配Bean(一)
- leetcode -- 357. Count Numbers with Unique Digits
- Leecode02-两数相加——Leecode热题100道系列
- 16行代码AC_Keeping Rabbits Gym - 102394K(附超时原因)