2012-01-16 19 views
5

我有一個helpers.py文件限定約30輔助功能如下被導出:自動導出的所​​有功能(與手動指定__all__)

from helpers import * 

爲了能夠做到這一點,我已經添加所有30個功能到__all__變量。我可以自動將所有功能導出,而不必指定每個功能嗎?

+0

我想有一些非導出的方法在你的helpers.py,否則'__all__'將不會被使用... –

+2

如果你沒有定義'__all__',那麼所有的公共名稱(那些不以'_'開頭的字符)將被語句導入。 – martineau

回答

13

是的,通過簡單地不指定__all__

7

其實我覺得Gandaro是正確的,你不必指定__all__,但如果由於某種未知的原因,你就必須做到這一點的話,可以過濾來自目錄)的關鍵字(:

__all__ = [ helper for helper in dir() if helper == MY_CONDITION ] 
+0

好點。實際上,如果需要,您可以在模塊中以更加複雜的方式確定'__all__'的內容 - 即,您不僅限於單個語句。 – martineau

6

如果不定義__all__那麼所有的模塊中的功能將通過調用from helpers import *

如果你有一些你想保密的功能,那麼你可以使用前綴與他們的名字被輸入下劃線。從我的測試,這將停止功能由import *

例如被導入,在helper.py:

def _HiddenFunc(): 
    return "Something" 

def AnActualFunc(): 
    return "Hello" 

然後:

>>> from helper import * 
>>> AnActualFunc() 
'Hello' 
>>> _HiddenFunc() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '_HiddenFunc' is not defined