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 getopt 参数处理小示例
Jun 09 Python
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
Django自定义manage命令实例代码
Feb 11 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
Python发送手机动态验证码代码实例
Feb 28 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
python异步Web框架sanic的实现
Apr 27 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
js下写一个事件队列操作函数
2010/07/19 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python动态性强类型用法实例
2015/05/09 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
python SocketServer源码深入解读
2019/09/17 Python
django框架ModelForm组件用法详解
2019/12/11 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
个人自我鉴定写法
2013/11/30 职场文书
党校培训思想汇报
2013/12/30 职场文书
六五普法规划实施方案
2014/03/21 职场文书
经济类毕业生求职信
2014/06/26 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
个人股份合作协议书
2014/10/24 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
美容院员工规章制度
2015/08/05 职场文书
培训心得体会怎么写
2016/01/25 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis