2011-07-20 84 views
22

我從一個模塊從一個Python模塊

進口大量的功能導入多個功能是它更好地使用

from my_module import function1, function2, function3, function4, function5, function6, function7 

這是一個有些凌亂,但避免了一切從充斥當前的命名空間該模塊或

from my_module import * 

看起來很整齊,但會填充該模塊中的所有內容。

在PEP8中找不到任何關於按名稱導入多少的限制。哪個更好?爲什麼?

回答

29

如果你確實需要這麼多功能,那麼你已經在污染你的命名空間了。

我建議:

import my_module 

或者,如果my_module有很長的名稱使用別名:

import my_long_module as m 
-2

我建議你解決,通過適當分組功能分手了你的模塊的問題並將其放入單獨的模塊中。

Kugel的別名方法也很好 - 雖然我不會鼓勵使用別名如「m」。 :O)

9

如果它是一個或另一個之間,使用

from my_module import function1, function2, function3, function4, function5, function6, function7 

請參見 「顯式優於隱式」。在import this

如果您只想要一個比my_module.function1短的名稱,總是有import my_module as mod

對於一些功能你多次使用(任一類型很多次,所以你需要一個簡短的名稱或一個循環,這樣訪問速度是很重要的),有

func1 = my_module.function1 
4

隨着管理的一點點你可以控制進口*進口。假設你的my_module有function1..function8,但你只想讓功能1到6可用。在你my_module,重新分配__all__屬性:

my_module.py

__all__ = ['function1', 'function2', 'function3' ...] 

def function1(): 
    ... 

# etc... 

現在,如果你使用from my_module import *,你會只導入你從my_module的__all__屬性定義的那些函數和變量。 PY。

+0

如果模塊是某些您不能或不想編輯的內置或第三方模塊,該怎麼辦? –

+0

然後你可能不能/不應該這樣做。我通過文件名稱假定這是他創建的東西。 –

+0

@MannyD - 這是正確的,但是在我的代碼中的其他地方我需要導入function9..functionN –