2014-12-30 16 views
3

我被這行代碼不解:Module(__ name__)做什麼?

email = Module(__name__) 

我猜這只是建立一個別名來指代我在模塊?如果不是,那麼這是做什麼的?

+9

這將取決於什麼模塊被定義爲... – kindall

+0

So模塊在Python中沒有一般含義? – cerhovice

+3

不,沒有內置命名的「模塊」。它看起來是一個基於它被大寫的事實的類,但這只是一個猜測。 – kindall

回答

1

Within a module , the module’s name (as a string) is available as the value of the global variable __name__ .

>>> import itertools as it 
>>> it.__name__ 
'itertools' 

但是email = Module(__name__)將引發NameError:(名稱 '模塊' 沒有定義)。如果您定義名稱Module,例如使用itertools(__name__),因爲它不可調用,則會產生TypeError

所以__name__是一個模塊屬性,你不能單獨傳遞它。

此外,您可以在dir()函數結果中找到__name__,該結果用於找出模塊定義的名稱。

>>> dir(itertools) 
['__doc__', '__name__', '__package__', 'chain', 'combinations', 'combinations_with_replacement', 'compress', 'count', 'cycle', 'dropwhile', 'groupby', 'ifilter', 'ifilterfalse', 'imap', 'islice', 'izip', 'izip_longest', 'permutations', 'product', 'repeat', 'starmap', 'takewhile', 'tee'] 
+0

但是Module()是做什麼的,給Module賦給當前模塊的__name__意味着什麼?這行代碼是否創建別名或什麼? – cerhovice

+0

@cerhovice名稱'Module'在python中沒有任何意義,因爲我說如果你的模塊不可調用'Module(__ name __)'將引發一個NameError:名稱'Module'沒有被定義。 – Kasramvd

+0

從理論上來說,OP可以從類型import ModuleType中指定爲Module或者其他屬性。令人驚訝的是,['ModuleType()'可以手動實例化](https://docs.python.org/3.4/library/types.html#types.ModuleType)。 – Kevin