python locals globals

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 介绍


1

2

3

4

5

6

7

8

9

10

11

12


>>> 
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 介绍


1

2

3

4

5

6

7

8

9

10

11

12


>>> 
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 函数返回一个全局变量的字典,包括所有导入的变量。

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

python locals globals

时间: 2024-12-12 10:44:09

python locals globals的相关文章

[py]Python locals() 函数

Python locals() 函数作用 http://www.runoob.com/python/python-func-locals.html locals() 函数会以字典类型返回当前位置的全部局部变量. 对于函数, 方法, lambda 函式, 类, 以及实现了 call 方法的类实例, 它都返回 True. locals()实例 >>>def runoob(arg): # 两个局部变量:arg.z ... z = 1 ... print (locals()) ... >&

python之globals()和locals()

global()返回全局作用域的属性字典, locals()返回局部作用域的属性字典.当locals()在模块顶层的位置时返回的值与global()相同. 实例 #!/usr/bin/python #coding=utf-8 class Dog(object): x = 11 y = 12 def __init__(self): m = 44 n = 33 def eat(self): k = 11 h = 22 ''' 打印 {'h': 22, 'k': 11, 'self': <__main

Python locals() 的陷阱

在工作中, 有时候会遇到一种情况: 动态地进行变量赋值, 不管是局部变量还是全局变量, 在我们绞尽脑汁的时候, Python已经为我们解决了这个问题. Python的命名空间通过一种字典的形式来体现, 而具体到函数也就是locals() 和 globals(), 分别对应着局部命名空间和全局命名空间. 于是, 我们也就能通过这些方法去实现我们"动态赋值"的需求. 例如: def test():     globals()['a2'] = 4test()print a2   # 输出 4

Python 函数 -globals()

globals() globals() 函数会以字典类型返回当前位置的全部全局变量. 实例: 1 >>>a='runoob' 2 >>> print(globals()) # globals 函数返回一个全局变量的字典,包括所有导入的变量. 3 {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'a': 'runoob',

Python globals() locals() vars() 三个内建函数的区别

首先参考官方文档对这三个函数的介绍: 2. Built-in Functions – Python3.5 1.globals() 返回当前全局符号表, 通常是返回当前模块下的全局符号表, 比如全局内建的函数,以及模块里的全局符号(定义声明的变量,类, 实例等), 在函数或者类方法中, globals()返回的模块符号表 是其所在模块, 而不是调用模块. 2.locals() 更新并以字典形式返回当前局部符号表. 自由变量由函数块的locals() 返回, 而不会由 class 块来返回. 需要注

python开发函数进阶:命名空间,作用域,函数的本质,闭包,内置方法(globales)

一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序 硬盘上--内存里#内置-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载) 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #全局命名空间 5 a = 5 6 b = 8 7 #局部命名空间(函数) 8 def my_max(): 9 c = a if a > b else b 10 return c 11 m = my_max() 12 pr

pythoning——7:Python的内置函数

abs(number) 返回一个数的绝对值 all(iterable)和any(iterable) 如果所有iterable都为真,则all返回True,否则返回False 如果任一iterable为真,则any返回True,否则返回False >>> all([1==1,1<2,"asdf",[1],True,'']) False >>> all([1==1,1<2,"asdf",[1],True]) True &g

Python __builtins__模块拾穗

1.isinstance函数:除了以一个类型作为参数,还可以以一个类型元组作为参数. isinstance(obj,basestring)===isinstance(obj,(str,unicode)) 2.getattr函数:可以给一个默认值,以免触发错误. writte=getattr(obj,'write',sys.stdout.write) 3.type函数:即可以得到一个对象的类型,也可以直接由它创建一个新类型: 1 >>> Point=type('Point',(object

High Performance Python 笔记(Python是门不错的语言,全栈程序员就用它好了!)

High Performance Python 目录 1Understanding Performant Python 2Profiling 3Lists and Tuples 4Dictionaries and Sets 5Iterators and Generators 6Matrix and Vector Computation 7Compiling to C 8Concurrency 9multiprocessing 10Clusters and Job Queues 11Using L