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 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
TensorFlow实现创建分类器
Feb 06 Python
如何实现删除numpy.array中的行或列
May 08 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
python实现俄罗斯方块小游戏
Apr 24 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
详解python 条件语句和while循环的实例代码
Dec 28 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
基于Python的接口测试框架实例
2016/11/04 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
Python对excel的基本操作方法
2021/02/18 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
机械设计职业生涯规划书
2013/12/27 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
交通安全教育心得体会
2016/01/15 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书