2012-08-13 60 views

回答

5

它不應該在性能方面有所差異,因爲整個模塊都必須以任何方式處理。

區別在於可讀性和名稱空間的污染。爲了最大限度地減少名稱衝突的機會以及名稱隱藏導致的意外行爲,謹慎的做法是僅導入實際使用的對象。

Martijn Pieters

所有頂級名導入到一個模塊,也可以除非__all__參數已設置再次從該模塊 進口。因此,你通常最終會以更項目是 添加到您當地的命名空間比你討價還價每個命令後在命名空間

+0

似乎沒有是的「的定義命名空間污染「隨處可見。你能更清楚地說出它的含義嗎?有趣的是,維基百科的[只有這個術語的概念](http://en.wikipedia.org/wiki/Namespace_%28computer_science%29#Python)是在Python的''xyz import *'的背景下'' – erikbwork 2012-08-13 12:22:06

+2

@ erikb85 :除非設置了__all__參數,否則也可以從該模塊再次導入所有導入模塊的頂級名稱。因此,通常最終將添加更多項目添加到您的本地命名空間,而不是您討價還價的項目。 – 2012-08-13 12:24:46

+1

命名空間用於防止相同名稱的類/函數/變量相互衝突。通過導入模塊中的所有內容,可以增加某個項目的機會,這些項目不想用於實際想要使用的項目。使用合格進口可以最大限度地降低風險 – 2012-08-13 12:27:15

2

區別:

>>> from math import * 
>>> len(vars()) 
46 
>>> vars() 
{'pow': <built-in function pow>, 'fsum': <built-in function fsum>, 'cosh': <built-in function cosh>, 'ldexp': <built-in function ldexp>, 'hypot': <built-in function hypot>, 'acosh': <built-in function acosh>, 'tan': <built-in function tan>, 'asin': <built-in function asin>, 'isnan': <built-in function isnan>, 'log': <built-in function log>, 'fabs': <built-in function fabs>, 'floor': <built-in function floor>, 'atanh': <built-in function atanh>, 'sqrt': <built-in function sqrt>, '__package__': None, 'frexp': <built-in function frexp>, 'factorial': <built-in function factorial>, 'degrees': <built-in function degrees>, 'pi': 3.141592653589793, 'log10': <built-in function log10>, '__doc__': None, 'asinh': <built-in function asinh>, 'fmod': <built-in function fmod>, 'atan': <built-in function atan>, '__builtins__': <module '__builtin__' (built-in)>, 'copysign': <built-in function copysign>, 'cos': <built-in function cos>, 'ceil': <built-in function ceil>, 'atan2': <built-in function atan2>, 'isinf': <built-in function isinf>, 'sinh': <built-in function sinh>, '__name__': '__main__', 'trunc': <built-in function trunc>, 'expm1': <built-in function expm1>, 'e': 2.718281828459045, 'tanh': <built-in function tanh>, 'radians': <built-in function radians>, 'sin': <built-in function sin>, 'lgamma': <built-in function lgamma>, 'erf': <built-in function erf>, 'erfc': <built-in function erfc>, 'modf': <built-in function modf>, 'exp': <built-in function exp>, 'acos': <built-in function acos>, 'log1p': <built-in function log1p>, 'gamma': <built-in function gamma>} 


>>> ================================ RESTART ================================ 


>>> from math import log10 
>>> len(vars()) 
5 
>>> vars() 
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', 'log10': <built-in function log10>, '__doc__': None} 
+0

沒有更詳細的解釋,我不能給你打勾,但這對於未來的讀者來說相當重要! +1 – erikbwork 2012-08-13 12:23:13

相關問題