首先参考官方文档对这三个函数的介绍:

2. Built-in Functions – Python3.5

1、globals()

返回当前全局符号表, 通常是返回当前模块下的全局符号表, 比如全局内建的函数,以及模块里的全局符号(定义声明的变量,类, 实例等), 在函数或者类方法中, globals()返回的模块符号表 是其所在模块, 而不是调用模块.

2、locals()

更新并以字典形式返回当前局部符号表. 自由变量由函数块的locals() 返回, 而不会由 class 块来返回. 需要注意的是, locals() 字典不应该被修改; 在解释器中对修改行为可能对 local 值或者自由变量无效.

3、vars()

返回 __dict__ 属性, 比如模块, 类, 实例, 或者其他 带有 __dict__ 属性的 object. 比如 模块和实例拥有可更新的 __dict__ 属性;然而其他 objects 可能会对 __dict__ 属性的写操作限制(例如 类使用 dictproxy 阻止直接对字典更新).vars() 如果不传参数, 那么作用与 locals() 一样. 需要注意的是, locals 字典只在读操作时使用, 因为对 locals 的更新会被忽略.

4、举例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# HELLO = 1 # GLOABLS 字典值包含 __builtins__, __doc__等通用的全局内建函数,模块,
# 以及刚才定义的 HELLO
GLOABLS = globals()
print("outer-global-{}".format(GLOABLS))
LOCALS = locals() # 此时与 globals() 是等价的!!
print("outer-locals-{}".format(LOCALS)) # globals 和 locals 此时是等价的, GLOBALS 和 LOCALS 其实是指向一个引用
LOCALS['B'] = 1 # VARS 的引用与 GLOABLS LOCALS 一样, 可用 id() 来证实.
VARS = vars() class A(object):
# 此时的 locals 是 class 块的 locals, 拥有 A_LOCALS A_GLOBALS 值
A_LOCALS = locals() # 与 GLOBALS 等价
A_GLOBALS = globals() def __init__(self): self.func_locals = None
self.func_globals = None def func(self):
self.func_locals = locals()
self.func_globals = globals() # 即 GLOBALS 值 a = A()
a.func()
print("instance-globals-{}".format(a.A_GLOBALS))
print("instance-locals-{}".format(a.A_LOCALS))
a_vars = vars(a) # 返回实例的 __dict__, 等价于 a_vars = a.__dict__
# print(a_vars)
A_DICT = vars(A) # 返回类的 dictproxy, 不能对其key直接操作赋值.
print(A_DICT)
a_vars['func_vars'] = "vars"
#print(a.func_vars) # "vars"

Python globals() locals() vars() 三个内建函数的区别的更多相关文章

  1. python实现进程的三种方式及其区别

    在python中有三种方式用于实现进程 多进程中, 每个进程中所有数据( 包括全局变量) 都各有拥有⼀份, 互不影响 1.fork()方法 ret = os.fork() if ret == 0: # ...

  2. Python 文件读写的三种模式和区别

    #coding=utf-8 #__author:Administrator #__time:2018/5/9 13:14 #__file_name:text1 import io #能调用方法的一定是 ...

  3. python核心高级学习总结3-------python实现进程的三种方式及其区别

    python实现进程的三种方式及其区别 在python中有三种方式用于实现进程 多进程中, 每个进程中所有数据( 包括全局变量) 都各有拥有⼀份, 互不影响 1.fork()方法 ret = os.f ...

  4. Python基础_eval(),exec(),globals(),locals(),compile()

    转发:http://www.cnblogs.com/yyds/p/6276746.html 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式 ...

  5. Python globals和locals函数_reload函数

    Python globals和locals函数_reload函数: globals( ): 返回所有能够访问到的全局名字 num = 5 sum = 0 def add(num): func_sum ...

  6. Python 基础【第三篇】输入和输出

    这里我们创建一个python(pytest)脚本用于学习测试(以后都为这个文件,不多做解释喽),这个文件必须要有执行权限的哈 1.创建pytest并赋予执行权限 [root@fengyuba_serv ...

  7. python学习心得第三章

    python学习心得第三章 1.三元运算 变量=值1 if 条件 else 值2 由图如果条件成立则赋值1给变量,如果条件不成立则赋值2给变量. 2.数据类型 集合:set() class set(o ...

  8. 机器学习算法与Python实践之(三)支持向量机(SVM)进阶

    机器学习算法与Python实践之(三)支持向量机(SVM)进阶 机器学习算法与Python实践之(三)支持向量机(SVM)进阶 zouxy09@qq.com http://blog.csdn.net/ ...

  9. Python爬虫学习:三、爬虫的基本操作流程

    本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...

随机推荐

  1. Go语言版本的helloworld

    新建一个project,然后建立一个main目录,在main目录下新建一个go类文件:main.go 内容如下: package main import "fmt" func ma ...

  2. sql server升级打补丁

    原本:https://blog.csdn.net/kk185800961/article/details/72436415 sql server升级 sql server打补丁 sql server升 ...

  3. Docker下载地址(官网实在太慢)

    官网因为大家都懂得各种原因,访问简直慢如狗. 找到一个网站,下载很快. 如下: https://oomake.com/download/docker-windows

  4. 009-shiro与spring web项目整合【三】验证码、记住我

    一.验证码 1.自定义FormAuthenticationFilter 需要在验证账号和名称之前校验验证码 /** * * <p>Title: CustomFormAuthenticati ...

  5. java 程序cpu100%问题

    找到java应用进程 ID即 java_id 找到该 java_id对应的CPU占用比较大的线程 ID即 thread_id 使用jdk自带jstack工具打印跟该线程相关的堆栈信息 [root@pv ...

  6. HDOJ 1501 Zipper 【简单DP】

    HDOJ 1501 Zipper [简单DP] Problem Description Given three strings, you are to determine whether the th ...

  7. top下的快捷键

    M —根据驻留内存大小进行排序 P —根据CPU使用百分比大小进行排序 T —根据时间/累计时间进行排序 c —切换显示命令名称和完整命令行 t —切换显示进程和CPU信息 m —切换显示内存信息 l ...

  8. OpenGL核心技术之Shadow Mapping

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  9. 查找java程序进程快速指令jps

    通过jdk1.5以后内置的一个指令,可以快速查找java进程pid,该命令是:jps 位置在:JAVA_HOME/bin/目录下面 功能 jps(Java Virtual Machine Proces ...

  10. 并发-ConcurrentHashMap源码分析

    ConcurrentHashMap 参考: http://www.cnblogs.com/chengxiao/p/6842045.html https://my.oschina.net/hosee/b ...