python基础----1. globals和locals
官方文档
globals
"""
Return a dictionary representing the current global symbol table. This is always the dictionary of the current module (inside a function or method, this is the module where it is defined, not the module from which it is called).
返回表示当前全局符号表的字典。这总是当前模块的字典(在函数或方法中,不是调用它的模块,而是定义它的模块)。
"""
locals
"""
Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in function blocks, but not in class blocks. Note that at the module level, locals() and globals() are the same dictionary.
更新并返回表示当前本地符号表的字典。 在函数代码块但不是类代码块中调用 locals() 时将返回自由变量。 请注意在模块层级上,locals() 和 globals() 是同一个字典。
"""
"""
When a name is used in a code block, it is resolved using the nearest enclosing scope. The set of all such scopes visible to a code block is called the block’s environment.
当一个名字在一个代码块中被使用时,将从最近的封闭作用域开始查找此名字……
"""
"""
If a name is bound in a block, it is a local variable of that block, unless declared as nonlocal. If a name is bound at the module level, it is a global variable. (The variables of the module code block are local and global.) If a variable is used in a code block but not defined there, it is a free variable.
如果一个名称被绑定在一个块中,那么它就是该块的一个局部变量,除非声明为非局部变量。如果名称在模块级绑定,则它是一个全局变量。(模块代码块的变量是局部变量和全局变量。)如果一个变量在一个代码块中使用,但没有在那里定义,那么它就是一个自由变量。
"""
举例说明
例1
var1 = 'at the top of module'
print('var1 in locals():', 'var1' in locals()) #
print('var1 in globals():', 'var1' in globals()) # def func():
var2 = 'in the scope of func'
print('va2 in locals():', 'var2' in locals()) #
print('va2 in globals():', 'var2' in globals()) # func()
结果1
var1 in locals(): True
var1 in globals(): True
va2 in locals(): True
va2 in globals(): False
"""
结果说明:
1. 1和2都为True是因为在模块层级上,locals() 和 globals() 是同一个字典
2. 同1
3. var2为函数体内定义的局部变量,所以3为True,4为False
4. 同3
"""
例2
n = 100 def func():
level, n = 'l1', 33
print(locals()) #
print('level' in globals()) # def outer():
print(locals(), n) #
print(locals()) #
print('level' in globals()) #
print(globals()['n']) # outer() func()
结果2
{'level': 'l1', 'n': 33}
False
{'n': 33} 33
{'n': 33}
False
100
"""
首先,在函数体外面只定义了一个全局变量,其余的全是局部变量。
1. 打印locals()时,会打印出函数体内定义的两个局部变量level和n
2. level为局部变量,所以2为False
3. 如果一个局部变量在一个代码中使用,但没有在那里定义,那它就是一个自由变量,自由变量会通过locals()返回,所以locals()中有n
4. outer函数本身没有定义局部变量,而函数内只使用了n这一局部变量,所以locals()也只返回n
5. 此模块只定义了一个全局变量,在模块顶部n=100,所以5为False,6为100
6. 同上
"""
注意:不管是locals()还是globals()的字典,其存储变量的名称时都是以字符串形式存储的。例如
a = 100
# globals()[a] # 会报错
globals()['a'] # 会返回正确的值100
python基础----1. globals和locals的更多相关文章
- Python基础_eval(),exec(),globals(),locals(),compile()
转发:http://www.cnblogs.com/yyds/p/6276746.html 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式 ...
- Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()
一.函数的返回值 return return: 自定义返回值,返回到哪里? 返回到函数的[调用处]1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return ...
- devi into python 笔记(七)locals与globals 字典格式化字符串 字符集
locals()与globals(): """ locals:局部命名空间 globals:全局命名空间 都是以dictionary的形式保存的,变量名是键,变量值是值 ...
- python globals和locals
文章里面说globals和locals函数返回的是命名空间 - 一个存有对应作用域的所有的变量.方法的字典,注意这里和dir函数返回数组的不一样 Python命名空间的本质 class Test(ob ...
- Python globals()和locals()比较
Python的两个内置函数,globals()和locals() ,它们提供了基于字典的访问局部和全局变量的方式. globals()是可写的,即,可修改该字典中的键值,可新增和删除键值对. 而loc ...
- Python globals和locals函数_reload函数
Python globals和locals函数_reload函数: globals( ): 返回所有能够访问到的全局名字 num = 5 sum = 0 def add(num): func_sum ...
- Python基础学习笔记(十一)函数、模块与包
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...
- 第四章:Python基础の快速认识內置函数和操作实战
本課主題 內置函数介紹和操作实战 装饰器介紹和操作实战 本周作业 內置函数介紹和操作实战 返回Boolean值的內置函数 all( ): 接受一個可以被迭代的對象,如果函数裡所有為真,才會真:有一個是 ...
- python基础——内置函数
python基础--内置函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...
随机推荐
- (Python2)自动对话机器人 代码
dict = { 'hello': 'hello'}flag = 'c'work = Trueprint 'hi,my name is python.'print 'do you want chat ...
- Kafka(一)简介
1.Kafka简介 Kafka已经被很多公司广泛应用,一款实时流式消息组件.发送消息端称为Producer,接收端称为Consumer,Kafka集群有多个kafka实例组成,每个实例称为broker ...
- kaldi通用底层矩阵运算库——CBLAS
matrix/cblas-wrappers.h 该头文件对CBLAS与CLAPACK的接口进行了简单的封装(将不同数据类型的多个接口封装为一个). 比如 cblas_scopy和cblas_dcopy ...
- BUAA-OO-表达式解析与求导
BUAA-OO-表达式解析与求导 解析 按照常规,解析这一部分我们分为词法分析与语法分析.当然由于待解析的字符串较简单,词法分析器和语法分析器不必单独实现. 词法分析器 按照常规,我们先手写一个词法分 ...
- JavaScript实现轮播图效果
我又来了,同志们.老想你们了 捕获小可爱一枚. 下面进入正题:用JavaScript原生代码写轮播图效果. 具体效果就不多说了,网站上面的轮播效果我们都知晓.下面是展示代码 html代码: <d ...
- github 远程库
一.在 Github 创建 django 项目时:先在本地创建项目,然后设置为本地仓库,再与远程仓库关联 在 Git Bash 进入django项目目录,输入命令git init,此时这个目录变成Gi ...
- [转] golang中struct、json、map互相转化
一.Json和struct互换 (1)Json转struct例子: type People struct { Name string `json:"name_title"` Age ...
- 手动安装sublime text3 文本编辑器是控制台
1 本来想安装一个体积小.功能又强大的文本编辑器,百度了一圈sublime text3 的口碑不错,然后就安装试试吧, 下了以后安装成功后,看到介绍sublime text3功能强大是因为他可以安装多 ...
- Razor Page 文件
Razor Pages 所有的Razor文件都以 .cshtml 结尾.大部分Razor文件都是可浏览的,包含客户端代码和服务器端代码的混合,处理后会将HTML发送到浏览器.这些页面通常被称为“内容页 ...
- winform倒计时
public partial class Form1 : Form { private int Seconds; public Form1() { InitializeComponent(); // ...