Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否存在隐式导入/加载的模块?_Python_Python 3.x - Fatal编程技术网

Python 是否存在隐式导入/加载的模块?

Python 是否存在隐式导入/加载的模块?,python,python-3.x,Python,Python 3.x,使用默认值启动交互式Python解释器时 设置,是否有任何模块隐式导入/加载到 解释器,不显式运行import 我原以为像sys或内置的这样的模块会是 键入它们的模块名称 >>> sys Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'sys' is not defined >>> builtins Tr

使用默认值启动交互式Python解释器时 设置,是否有任何模块隐式导入/加载到 解释器,不显式运行
import

我原以为像
sys
内置的
这样的模块会是 键入它们的模块名称

>>> sys
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined

>>> builtins
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'builtins' is not defined
>>系统
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“sys”
>>>内置
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“内置”
那么,默认情况下,没有隐式导入/加载的模块是正确的吗

  • 在执行python脚本时,是否隐式地存在任何模块 导入/加载到脚本中,而不显式指定 在脚本中导入


  • 谢谢。

    通常自动导入的一个模块是site.py。它还导入了许多其他模块。但是,即使您使用选项
    -S
    阻止它导入,Python仍然会导入许多模块。请尝试以下脚本:

    #! /usr/bin/python2.7 -ESs
    
    import sys
    print(sys.modules)
    
    看看有多少模块。将shebang更改为

    #! /usr/bin/python3 -EISs
    
    然后说“哇!”:-)

    仅限内置设备:

    #! /usr/bin/python2.7 -ESs
    print(dir())
    

    =>[''.'内置'.'.'文档'.'.'文件'.'.''.'.'.'.'名称'.'.'.''.'.'.'包'.'.'.'.'.'.'.'.''.'可能有,但不在全局命名空间中。试试python-v。同样,这些模块是导入的,当您实际写入
    import
    ,而它们不在全局命名空间中时不必“重新加载”。请参见
    globals()
    您将发现内置的模块和
    。默认情况下这两个都已加载。@ChihebNexus谢谢。在python3中,如果默认情况下隐式加载模块
    builtins
    ,为什么名称
    builtins
    不可用(请参阅我文章中的输出)?@Tim,这有点棘手。我真的认为这是一个影子进口。实际上,默认情况下导入的是
    \uuuuuuuuuuuuuuuuuuuuuu
    ,而不是
    内置的。但是,如果查看
    globals()
    ,您将看到默认情况下导入了
    \uuuuuuuuuuuu内置项。和
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    导入
    后,将抛出与
    内置函数相同的结果。所以,我想,如果我错了,请纠正我,这是解释器默认行为中的影子导入。谢谢。默认情况下,
    sys
    本身是否已加载?我想你的方式可以;不显示。已加载
    sys.modules
    中列出的所有模块,但它们不在module
    内置中,因此它们在当前命名空间中不自动可用。你还得进口。谢谢。哪些模块在当前名称空间中自动可用,即无需我导入它们?