Python中globals和locals的区别

2024-04-30 14:32
文章标签 python 区别 globals locals

本文主要是介绍Python中globals和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}

 

 

 

 

Python的两个内置函数,locals 和globals,它们提供了基于字典的访问局部和全局变量的方式。 

1、locals()是只读的。globals()不是。这里说的只读,是值对于原有变量的只读。其实还可以对locals()赋值的。见下图

上面的图就可以看出了,对locals()中增加了一个b变量。

locals()和globals()在作用域上的区别

正如它们的命名,locals()返回的是局部变量,globals()返回的是全局变量.

这个差异在函数中就比较容易发现了,建议自己编写函数试试.

1
2
3
4
5
6
7
>>> def a():
...     b=1
...     print locals(),globals()
...
>>> a()
{'b': 1} {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main
__', '__doc__': None, 'a': <function a at 0x01A8A6B0>, '__package__': None}

 

locals()和globals()在访问性上的区别

我们先来看一段简单的脚本吧.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> a=1
>>> b=globals()
>>> print globals()
{'a': 1, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__packa
ge__': None, '__name__': '__main__', '__doc__': None}
>>> a=2
>>> print b
{'a': 2, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__packa
ge__': None, '__name__': '__main__', '__doc__': None}
>>> b['a']=3
>>> print globals()
{'a': 3, 'b': {...}, '__builtins__': <module '__builtin__' (built-in)>, '__packa
ge__': None, '__name__': '__main__', '__doc__': None}
>>> print a
3

可以看出globals()返回的是当前全局变量的引用,而且可以通过修改b['a']来改变变量a的值.

所以globals()的返回值是可读可写的.

 

2、locals和globals的返回不同

locals(...)
    locals() -> dictionary
   
    Update and return a dictionary containing the current scope's local variables.

globals(...)
    globals() -> dictionary
   
    Return the dictionary containing the current scope'sglobal variables.

也就是说globals返回的是当前模块的全局变量 locals返回的是局部变量。注意,locals返回的是当前所在最小命名空间的局部变量的一个拷贝。比如说在一个函数中调用locals(),那么返回的将是这个函数内部的局部变量。

记住,locals返回的变量都是原有变量的“拷贝”。

让我们再来看一段脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> def a():
...     b=1
...     c=locals()
...     print c
...     b=2
...     print locals()
...     print c
...     c['b']=3  ##在locals()中试图修改b的值,失败了.
...     print locals()
...     print b
...     locals()['b']=3
...     print locals()
...     print b
...     print c
...
>>> a()
{'b': 1}
{'c': {...}, 'b': 2}
{'c': {...}, 'b': 2}
{'c': {...}, 'b': 2}
2
{'c': {...}, 'b': 2}
2
{'c': {...}, 'b': 2}

在locals()中试图修改b的值,失败了.

在locals()的引用变量c中修改b的值,失败了.

可见locals()虽然返回的和globals()一样都是字典,但其访问性是不同的.

globals()可以直接修改其中对应键的值,而locals()做不到.

 

 

这篇关于Python中globals和locals的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949115

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand