2017-07-01 77 views
0

当我们打开交互式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} 

回答

1

是的,解释器会话是__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__' 
+0

您也可以'import __main__'。 –

+0

@AlexHall:当然,但这只是获得完全相同对象的另一种方式。 –

+0

谢谢。为什么不在'globals()'的输出中'__file__:None'?为什么''__dict__'和'__file__'出现在'globals()'的输出中? – Tim

相关问题