Python globals()和locals()比较
Python的两个内置函数,globals()和locals() ,它们提供了基于字典的访问局部和全局变量的方式。
globals()是可写的,即,可修改该字典中的键值,可新增和删除键值对。
而locals()是不可修改字典中已存在的键值的,也不能pop移除键值对,但是可以新增键值对。
Demo:
a = 1 # 定义一个全局变量a
def demo():
x = 100 # 定义一个局部变量x
global b
b = 2 # 定义一个全局变量b,因为在函数内,只有调用了该函数才有变量b
print(globals())
print(locals())
globals()['a'] = 'modified a' # 修改函数外的全局变量a,成功
globals()['b'] = 'modified b' # 修改函数中定义的全局变量b,成功
globals()['c'] = 'new c' # 新增一个全局变量c,成功
locals()['x'] = 'modified x' # 修改函数内的局部变量x,结果失败了
locals()['y'] = 'new y' # 新增一个函数内的局部变量y,成功
globals().pop('c') # 尝试移除全局变量c,成功
locals().pop('x') # 尝试移除局部变量x,失败了
print(globals())
print(locals())
def print_b():
try:
print(b)
except NameError as e:
print(e)
def print_x():
try:
print(x)
except NameError as e:
print(e)
print_b() # b虽然是全局变量,但是是在函数demo内定义的,在该函数调用前b是没有的,所以not defined
demo() # 调用demo函数,此时有了全局变量b
print_x() # x局部变量,在外访问不到
print_b() # 此时打印全局变量b正常,并且是修改后的值
# 打印结果 字典中省略了内置的变量和定义的方法,方便比较
name 'b' is not defined
{'a': 1, 'b': 2} # globals()
{'x': 100} # locals()
{'a': 'modified a', 'b': 'modified b'} # globals()
{'y': 'new y', 'x': 100} # locals()
name 'x' is not defined
modified b
Python globals()和locals()比较的更多相关文章
- Python globals和locals函数_reload函数
Python globals和locals函数_reload函数: globals( ): 返回所有能够访问到的全局名字 num = 5 sum = 0 def add(num): func_sum ...
- python globals和locals
文章里面说globals和locals函数返回的是命名空间 - 一个存有对应作用域的所有的变量.方法的字典,注意这里和dir函数返回数组的不一样 Python命名空间的本质 class Test(ob ...
- Python globals() locals() vars() 三个内建函数的区别
首先参考官方文档对这三个函数的介绍: 2. Built-in Functions – Python3.5 1.globals() 返回当前全局符号表, 通常是返回当前模块下的全局符号表, 比如全局内建 ...
- globals() 和 locals() 函数
globals() 和 locals() 函数 根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字. 如果在函数内部调用 locals(),返回的 ...
- Python globals() 函数
Python globals() 函数 Python 内置函数 描述 globals() 函数会以字典类型返回当前位置的全部全局变量. 语法 globals() 函数语法: globals() 参数 ...
- python基础----1. globals和locals
官方文档 globals """ Return a dictionary representing the current global symbol table. Th ...
- globals和locals的区别
Python的两个内置函数,locals 和globals,它们提供了基于字典的访问局部和全局变量的方式. 1.locals()是只读的.globals()不是.这里说的只读,是值对于原有变量的只读. ...
- python学习之locals()
locals() 返回一个字典对象.收集并返回局部变量.可以用在函数中,用来收集局部变量. >>> def f(): ... a = 'tom' ... print(locals() ...
- python基础全部知识点整理,超级全(20万字+)
目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...
随机推荐
- TCP数据段格式+UDP数据段格式详解
TCP 报文格式 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP 报文段的报头有 10 个必需的字段和 ...
- java服务宕机原因查询
背景 在java服务项目上线之后经常会出现宕机的情况 常见原因 内存溢出 1.查到服务进程号 [root@wms ~]# ps -ef|grep java root 6399 6069 0 08:57 ...
- 与word、excel交互问题总结
不同版本的Office对应的型号不同,往往问题出现在注册表中有多个版本,所以程序运行经常提示错误. 1.找不到引用microsoft.office.core解决办法 (引用中有感叹号,说明引用不成功) ...
- string str = File.ReadAllText(@"c:\temp\ascii.txt");
string str = File.ReadAllText(@"c:\temp\ascii.txt");
- P4981 父子 Cayley公式
CayleyCayley公式的定义是这样的,对于n个不同的节点,能够组成的无根树(原来是无向连通图或者是有标志节点的树)的种数是n^(n-2)种.(这里让大家好理解一点,就写成了无根树,其实应该是一样 ...
- 响应式web布局
通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达”大于或等于”和”小与或等于”.如:wi ...
- 微信小程序_(校园视)开发视频的展示页_下
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
- nmap脚本nse的使用
nmap脚本(nse)使用总结 0x01 nmap按脚本分类扫描 nmap脚本主要分为以下几类,在扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描: auth: 负责处理鉴权证书( ...
- Android学习_7/25
常用控件 Android控件使用规律:先定义id,再指定宽度和高度,然后适当加入一些控件特有的属性 1. TextView 在界面上显示一段文本 2. Button ...
- [心得]暑假DAY 5
好久没更新博客了 最近事情太多太多 tarjan进阶,点双边双 T2压力 最大坑点:点双缩点 它不是直接把割点连成树(割点会有环) 而是用割点作”中介“,联接点双构成一颗树(所谓圆方树) 接着在上面进 ...