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中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
Python 字符串换行的多种方式
Sep 06 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
Python 函数list&read&seek详解
Aug 28 Python
Python实现线性插值和三次样条插值的示例代码
Nov 13 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
Python手拉手教你爬取贝壳房源数据的实战教程
May 21 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实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
php 常用的系统函数
2017/02/07 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
python——全排列数的生成方式
2020/02/26 Python
虚拟机下载python是否需要联网
2020/07/27 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
大学生职业生涯规划范文
2014/01/22 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
师范生见习报告范文
2014/11/03 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
百万英镑观后感
2015/06/09 职场文书
各国货币符号大全
2022/02/17 杂记
详解SQL的窗口函数
2022/04/21 Oracle