python中locals()和globals()与dir()之间的区别

Zer*_*ays 10 python

假设这段代码:

>>> iterator=filter(lambda x: x % 3 == 0, [2, 18, 9, 22, 17, 24, 8, 12, 27])
>>> x=int()
>>> locals()
{'__package__': None, '__spec__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, 'iterator': <filter object at 0x02E732B0>, 'x': 0, '__doc__': None}
>>> globals()
{'__package__': None, '__spec__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, 'iterator': <filter object at 0x02E732B0>, 'x': 0, '__doc__': None}
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'iterator', 'x']
>>> 
Run Code Online (Sandbox Code Playgroud)

locals,globals和dir有什么区别?什么是用法?

Ana*_*mar 10

在全球范围内,无论是locals()globals()返回相同的字典全局命名空间.但是在函数内部,locals()副本返回到本地名称空间,而globals()返回全局名称空间(包含全局名称).所以它们之间的区别仅在函数中可见.举例说明 -

>>> locals() == globals() #global scope, that is directly within the script (not inside a function.
True
>>> def a():
...     l = 1
...     print('locals() :',locals())
...     print('globals() :',globals())
...
>>> a()
locals() : {'l': 1}
globals() : {'BOTTOM': 'bottom', 'PROJECTING': 'proj....
Run Code Online (Sandbox Code Playgroud)

文件globals() -

全局()

返回表示当前全局符号表的字典.这始终是当前模块的字典(在函数或方法内部,这是定义它的模块,而不是调用它的模块).

文件locals()-

当地人()

更新并返回表示当前本地符号表的字典.locals()在函数块中调用时返回自由变量,但在类块中不调用.

注意:不应修改此词典的内容; 更改可能不会影响解释器使用的本地和自由变量的值.

要回答有关使用的问题,一种用法是能够使用字符串来访问变量/名称.例如,如果你有一个名为的变量a,并且你想使用字符串来访问它的值 - 'a'你可以使用globals()locals()作为 - globals()['a'],这会返回全局变量的值a或者locals()['a']返回a当前命名空间的值(直接在脚本内部时是全局命名空间,如果在函数内部则是本地命名空间

dir()显示作为参数传入的对象的属性列表,没有参数,它返回当前本地命名空间中的名称列表(类似于locals().keys()).从文件dir() -

DIR([对象])

如果没有参数,则返回当前本地范围中的名称列表.使用参数,尝试返回该对象的有效属性列表.


cas*_*rco 8

您可以注意到和之间的区别locals,globals如果您尝试在函数内执行它们.如果您尝试在不创建嵌套作用域的情况下从控制台运行它们,那么显而易见的结果是您将无法发现任何差异.