Python两个内置函数 locals 和globals(学习笔记)


Posted in Python onAugust 28, 2016

Python两个内置函数——locals 和globals

这两个函数主要提供,基于字典的访问局部和全局变量的方式。
在理解这两个函数时,首先来理解一下python中的名字空间概念。Python使用叫做名字空间的东西来记录变量的轨迹。名字空间只是一个字典,它的键字就是变量名,字典的值就是那些变量的值。实际上,名字空间可以象Python的字典一样进行访问

每个函数都有着自已的名字空间,叫做局部名字空间,它记录了函数的变量,包括函数的参数和局部定义的变量。每个模块拥有它自已的名字空间,叫做全局名字空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。还有就是内置名字空间,任何模
块均可访问它,它存放着内置的函数和异常。

当一行代码要使用变量 x 的值时,Python会到所有可用的名字空间去查找变量,按照如下顺序:

1.局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x,Python将使用这个变量,然后停止搜索。
2.全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用这个变量然后停止搜索。
3.内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python将假设 x 是内置函数或变量。

如果Python在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 的异常,同时传递
There is no variable named 'x' 这样一条信息。

象Python中的许多事情一样,名字空间在运行时直接可以访问。特别地,局部名字空间可以通过内置的 locals 函数来访问。全局(模块级别)名字空间可以通过 globals 函数来访问

locals 介绍

>>> def test(arg):
#函数 foo 在它的局部名字空间中有两个变量:arg(它的值被传入函数),和 z(它是在函数里定义的)。
  z = 1
  print locals()
>>> test(4)
#locals 返回一个名字/值对的字典。这个字典的键字是字符串形式的变量名字,字典的值是变量的实际值。
#所以用 4 来调用 foo,会打印出包含函数两个局部变量的字典:arg (4) 和 z (1)。
{'z': 1, 'arg': 4}
>>> test('doulaixuexi')
#locals 可以用于所有类型的变量。
{'z': 1, 'arg': 'doulaixuexi'}
>>>

globals 介绍

>>> from sys import *
>>> print globals()
{'setrecursionlimit': <built-in function setrecursionlimit>, 
'dont_write_bytecode': False, 
'getfilesystemencoding': <built-in function getfilesystemencoding>, 
'long_info': sys.long_info(bits_per_digit=15, sizeof_digit=2), 
'stdout': <idlelib.rpc.RPCProxy object at 0x02110850>, 
'text': <function text at 0x02111A70>, 
'meta_path': [], 
'exc_clear': <built-in function exc_clear>, 
'prefix': 'C:\\Python27', 'getrefcount': <built-in function getrefcount

由此可见,发现globals 函数返回一个全局变量的字典,包括所有导入的变量。

#局部变量函数locals例子(locals 返回一个名字/值对的字典。):

def foo(arg, a):
	x = 1
	y = 'xxxxxx'
	for i in range(10):
		j = 1
		k = i
	print locals()


#调用函数的打印结果	
foo(1,2)
#{'a': 2, 'i': 9, 'k': 9, 'j': 1, 'arg': 1, 'y': 'xxxxxx', 'x': 1}

 

from module import 和 import module之间的不同。使用 import module,模块自身被导入,
但是它保持着自已的名字空间,这就是为什么你需要使用模块名来访问它的函数或属性(module.function)
的原因。但是使用 from module import,实际上是从另一个模块中将指定的函数和属性导入到你自己的名字
空间,这就是为什么你可以直接访问它们却不需要引用它们所来源的模块的原因。

locals 是只读的,globals 不是 

Python 相关文章推荐
python socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
python中列表的含义及用法
May 26 Python
Python新手学习标准库模块命名
May 29 Python
Python 字典中的所有方法及用法
Jun 10 Python
Python 下载Bing壁纸的示例
Sep 29 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 11 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 #Python
python解决方案:WindowsError: [Error 2]
Aug 28 #Python
详解Python中的文件操作
Aug 28 #Python
Python环境变量设置方法
Aug 28 #Python
Python代码解决RenderView窗口not found问题
Aug 28 #Python
python 文件操作api(文件操作函数)
Aug 28 #Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 #Python
You might like
打造计数器DIY三步曲(下)
2006/10/09 PHP
php图片验证码代码
2008/03/27 PHP
探讨fckeditor在Php中的配置详解
2013/06/08 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
php源码的安装方法和实例
2019/09/26 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
详解Vue之事件处理
2020/07/10 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
Nest.js 授权验证的方法示例
2021/02/22 Javascript
python网络编程实例简析
2014/09/26 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
python sort、sort_index方法代码实例
2019/03/28 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
银行自荐信范文
2013/10/07 职场文书
开业庆典主持词
2014/03/21 职场文书
优秀教师推荐材料
2014/12/16 职场文书
法定代表人身份证明书
2015/06/18 职场文书