Python 内置函数globals()和locals()对比详解


Posted in Python onDecember 23, 2019

这篇文章主要介绍了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 相关文章推荐
Python 元类使用说明
Dec 18 Python
python检测lvs real server状态
Jan 22 Python
Python编写检测数据库SA用户的方法
Jul 11 Python
在Python中使用HTML模版的教程
Apr 29 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
python虚拟环境迁移方法
Jan 03 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
python删除csv文件的行列
Apr 06 Python
Python anaconda安装库命令详解
Oct 16 Python
python微信智能AI机器人实现多种支付方式
Apr 12 Python
Python 项目转化为so文件实例
Dec 23 #Python
python 解决cv2绘制中文乱码问题
Dec 23 #Python
python 实现查询Neo4j多节点的多层关系
Dec 23 #Python
python 多进程队列数据处理详解
Dec 23 #Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 #Python
python读取ini配置文件过程示范
Dec 23 #Python
python读取Kafka实例
Dec 23 #Python
You might like
php学习笔记之 函数声明
2011/06/09 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
在Python中增加和插入元素的示例
2018/11/01 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
python hashlib加密实现代码
2019/10/17 Python
python操作gitlab API过程解析
2019/12/27 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
用友笔试题目
2016/10/25 面试题
装饰工程师岗位职责
2014/06/08 职场文书
国庆阅兵观后感
2015/06/15 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL