使用命令pyrasite-shell pid,可以与进程进行shell交互,获取,在shell里执行globals(),可以获取整个进程的全部全局变量,比如django应用、flask应用的变量,而不是获取某个模块的全部全局变量,更新信息:https://www.cnblogs.com/shengulong/p/8044132.html

  

  The globals() function returns a dictionary containing the variables defined in the global namespace. When globals() is called from a function or method, it returns the dictionary representing the global namespace of the module where the function or method is defined, not from where it is called.

  ----摘自:https://thepythonguru.com/python-builtin-functions/globals/

在python中,变量赋值是引用,指向相同的内容。

举例:如图

globals() 函数会以字典类型返回当前位置的全部全局变量。

Python 内置函数 locals() 和globals()

1》这两个函数主要提供,基于字典的访问局部变量和全局变量的方式。
python 使用叫做名字空间的东西来记录变量的轨迹。名字空间是一个字典 ,它的键就是字符串形式的变量名字,它的值就是变量的实际值。
名字空间可以像 Python 的 dictionary 一样进行访问。
在一个 Python 程序中的任何一个地方,都存在几个可用的名字空间。
每个函数都有着自已的名字空间,叫做局部名字空间,它记录了函数的变量,包括函数的参数和局部定义的变量。
每个模块拥有它自已的名字空间,叫做全局名字空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
还有就是内置名字空间, 任何模块均可访问它,它存放着内置的函数和异常。
2》当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。
全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,
同时传递 There is no variable named 'x' 这样一条信息.
3》名字空间在运行时直接可以访问。局部名字空间可以通过内置的 locals 函数来访问。全局 (模块级别) 名字空间可以通过内置的 globals 函数来访问。
locals 对局部 (函数) 名字空间做了些什么,globals 就对全局 (模块) 名字空间做了什么。
然而 globals 更令人兴奋,因为一个模块的名字空间包含了模块级的变量和常量,它还包括了所有在模块中定义的函数和类,以及任何被导入到模块中的东西。
4》回想一下 from module import 和 import module 之间的不同?
使用 import module,模块自身被导入,但是它保持着自已的名字空间,
这就是为什么您需要使用模块名来访问它的函数或属性: module.function 的原因。
但是使用 from module import,实际上是从另一个模块中将指定的函数和属性导入到您自己的名字空间,
这就是为什么您可以直接访问它们却不需要引用它们所来源的模块的原因。
使用 globals 函数,您会真切地看到这一切的发生。
5》locals 是只读的,不可修改, 而globals可以修改,原因是:
locals()实际上没有返回局部名字空间,它返回的是一个拷贝。所以对它进行修改,修改的是拷贝,而对实际的局部名字空间中的变量值并无影响。
globals()返回的是实际的全局名字空间,而不是一个拷贝: 与 locals 的行为完全相反。
所以对 globals 所返回的 dictionary 的任何的改动都会直接影响到全局变量的取值。

例一:执行文件:python module1.py

#!/usr/bin/python3

from pprint import pprint

a = 100
b = 4 def foo():
x = 100 # x is a local variable
print(x) pprint(globals())

输出结果:

{'__builtins__': <module 'builtins' (built-in)>,
'__cached__': None,
'__doc__': None,
'__file__': './module1.py',
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f699cab37f0>,
'__name__': '__main__',
'__package__': None,
'__spec__': None,
'a': 100,
'b': 4,
'foo': <function foo at 0x7f699ca1e2f0>,
'pprint': <function pprint at 0x7f699ca1e6a8>}
__package__这种以双下划线开始和结束的key是python解释器定义的。最后面的是模块module1定义的变量:a/b/foo/pprint

例二:执行python module2.py。

模块module1.py内容:

#!/usr/bin/python3

from pprint import pprint

a = 100
b = 4 def foo():
x = 100 # x is a local variable
pprint(globals())

模块module2.py内容:

#!/usr/bin/python3

import module1
from x = 100
y = 2 module1.foo()

输出结果:

{'__builtins__': { ... }
'__cached__': '/home/overiq/tmp/__pycache__/module1.cpython-35.pyc',
'__doc__': None,
'__file__': '/home/overiq/tmp/module1.py',
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f17b12305c0>,
'__name__': 'module1',
'__package__': '',
'__spec__': ModuleSpec(name='module1', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f17b12305c0>, origin='/home/overiq/tmp/module1.py'),
'a': 100,
'b': 4,
'foo': <function foo at 0x7f17b121d488>,
'pprint': <function pprint at 0x7f17b121d730>}

例三:执行python test1.py

test.py

# /usr/bin/env python
# -*- coding:utf-8 -*-
from pprint import pprint a=100
b=4
c=globals()
c['var1'] = 'right'
def foo():
x='局部变量'
d = globals()
d['var2'] = 'neibu'
print x foo()

test1.py

# /usr/bin/env python
# -*- coding:utf-8 -*-
from pprint import pprint
from test import a
from test import var1,var2
pprint(a)
pprint(var1)
pprint(var2)

输出结果:

局部变量
100
'right'
'neibu'

例四:执行python test4.py。使用global声称为全局变量

test4.py内容:

# /usr/bin/env python
# -*- coding:utf-8 -*-
from pprint import pprint
a=2
b=4 def fun():
global a
a = a+1
b=40
pprint(a)
pprint(b)
fun()
pprint(a)
pprint(b)

输出结果:

3
40
3
4

例五:执行python test4.py。在函数中直接使用全局变量。所谓全局是指模块test4.py内部。

test4.py内容:

# /usr/bin/env python
# -*- coding:utf-8 -*-
from pprint import pprint
a=2
b=4 def fun():
global a
a = a+1
pprint(a)
pprint(b)
fun()
pprint(a)
pprint(b)

输出结果:

3
4
3
4

参考:

https://thepythonguru.com/python-builtin-functions/globals/

http://www.runoob.com/python/python-func-globals.html

https://blog.csdn.net/sxingming/article/details/52061630

python的globals()使用的更多相关文章

  1. python通过globals()函数获取全局变量,并销毁全局变量

    如果想获取python程序中所有全局变量的信息,并将其销毁,可以定义如下函数 def clear(): for key, value in globals().items(): if callable ...

  2. Python 函数 -globals()

    globals() globals() 函数会以字典类型返回当前位置的全部全局变量. 实例: >>>a='runoob' >>> print(globals()) ...

  3. python的globals()

    以字典的形式返回当前位置的全局变量

  4. python笔记22-literal_eval函数处理返回json中的单双引号

    前言 在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常 ...

  5. (二十一)python 3 内置函数

    阅读目录 1.abs() 2.dict() 3.help() 4.min() 5.setattr() 6.all() 7.dir() 8.hex() 9.next() 10.slice() 11.an ...

  6. python 部分内置函数详解

    简介 eval与exec eval和exec都是python内置的可以执行python代码的函数,但它们之间有所区别. eval(expression[, globals[, locals]]) ex ...

  7. python3之内置函数

    1.abs() 取数字的绝对值 >>> print(abs(-28)) 28 >>> print(abs(-2.34)) 2.34 >>> pri ...

  8. python 中locals() 和 globals()

    1.locals() 和 globals() 是python 的内建函数,他们提供了字典的形式访问局部变量和全局变量的方式. 示例代码: def test(arg): a=1 b=2 data_dic ...

  9. Python – locals和globals

    转载: Python两个内置函数--locals 和globals (学习笔记) Python两个内置函数locals 和globals, 这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理 ...

随机推荐

  1. JS判断客户端是否是iOS或者Android手机移动端

    var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > - ...

  2. div左右自适应高度一致

    <div style="width:300px;"> <div id="Left" style="float:left;" ...

  3. leetcode 141 142. Linked List Cycle

    题目描述: 不用辅助空间判断,链表中是否有环 /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis ...

  4. linux命令(44):date命令

    1.命令格式: date [参数]... [+格式] 2.命令功能: date 可以用来显示或设定系统的日期与时间. 3.命令参数: 必要参数: %H 小时(以00-23来表示). %I 小时(以01 ...

  5. 如何设置WordPress文章特色图像(Featured Image)

    WordPress的特色图像(Featured Image)是一个很方便的功能,过去为了给每篇文章设置一个缩略图,我们需要用脚本去匹配文章中的第一张或者最后一张图片,或者通过附件方式获取图片,有了特色 ...

  6. Child Action

    Control [ChildActionOnly]      //只能用于Child Action public ActionResult Time() { return PartialView(Da ...

  7. git 命令小结

    一.git 版本管理 1.git log: 获取当前版本之前的所有操作 2.git log --pretty=oneline:获取当前版本的前三和后三个操作 3.git reflog :获取当前项目下 ...

  8. 报错AbstractStandardExpressionAttributeTagProcessor

    java.lang.NoSuchMethodError: org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTag ...

  9. react native android应用启动画面

    参考地址:https://www.youtube.com/watch?v=rnLR65OGtic 第一步:生成启动画面的背景图片 生成一个2048*2048的背景图片,打开网站https://apet ...

  10. Ionic-wechat项目边开发边学(一):环境搭建和创建一个项目

    之前学AngularJS,教程过了一遍觉得很简单,但真正写几个Demo就错误百出,一个小小的功能要折腾很久.所以这次学Ionic,准备以开发一个项目为切入点去学,那么问题来了,开发什么项目呢? 纠结了 ...