当我们打开交互式 python3 解释器并运行一些命令时,我们是否在某个模块中运行命令?



当我们打开交互式python3解释器并运行一些命令时,我们会在某个模块中运行命令吗? 该模块是什么?

我问这个是因为在这种情况下__name____main__,我认为__name__是我不知道并且正在要求的某个模块的属性。但是__dict____file__作为模块的属性不存在。存在的属性是:

>>> globals()
{'__package__': None, '__doc__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__',   '__builtins__': <module 'builtins' (built-in)>, '__spec__': None}

是的,解释器会话是__main__模块:

$ python3.6
Python 3.6.1 (default, Apr  5 2017, 20:56:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.modules['__main__']
<module '__main__' (built-in)>
>>> sys.modules['__main__'].__dict__ is globals()
True

globals()对象模块__dict__命名空间。不要将命名空间的内容与命名空间本身混淆(当您请求实例的属性时,__dict__也不在实例__dict__属性内(。

__file__属性是可选的;由于您不是从此处的文件运行,因此未设置该属性:

>>> sys.modules['__main__'].__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module '__main__' has no attribute '__file__'

最新更新