2017-06-22 47 views
1
  1. 開始時使用默認 設置的交互式Python解釋器,是有隱式地導入/裝入 解釋任何模塊,但沒有明確運行import <modulename>是否有隱式導入/加載的模塊?

    我認爲像sysbuiltins模塊會是這樣,但是當我 鍵入他們的模塊名稱,

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

    因此,它是正確的,在默認情況下,沒有模塊輸入/隱式加載?

  2. 當執行一個Python腳本,是否有任何模塊隱含 進口/裝入腳本,而不顯式指定的腳本 import <modulename>

謝謝。

+1

可以存在,但**不在全局名稱空間**中。試試'python -v'。再次,這些模塊是導入的,當您實際編寫「import 」時不需要「重新加載」,但它們不會位於全局名稱空間中。 –

+0

參見'globals()'你會發現'__builtins__'和'__loader__' [''](https://docs.python.org/3/library/importlib.html# importlib.machinery.BuiltinImporter)。兩者都默認加載。 –

+1

@ChihebNexus謝謝。在python3中,如果模塊'builtins'默認是隱式加載的,爲什麼不能使用'builtins'這個名字(見我的文章中的輸出)? – Tim

回答

2

通常自動導入的一個模塊是site.py.它會導入很多其他模塊。但即使您使用選項-S阻止它導入,Python仍會導入很多模塊。請嘗試以下腳本:

#! /usr/bin/python2.7 -ESs 

import sys 
print(sys.modules) 

並查看有多少個模塊。將shebang更改爲

#! /usr/bin/python3 -EISs 

並說「哇!」 :-)

+0

謝謝。 「sys」本身默認加載了嗎?我想你的文章的方式可以表明這一點。 – Tim

+0

'sys.modules'中列出的所有模塊都已加載,但它們不在模塊'builtins'中,因此它們不會在當前名稱空間中自動提供。你仍然需要導入它們。 – phd

+0

謝謝。哪些模塊在當前命名空間中自動可用,即沒有我導入它們? – Tim

1

只有__builtins__:

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

=> [ '__builtins__', '__doc__', '__file__', '__name__', '__PACKAGE__']

相關問題