2013-03-17 74 views
0

如果你有一個像module一個模塊,可以繞過它,並利用現有的功能內不使用模塊?有沒有辦法繞過Python中的命名空間/模塊名稱?

我導入的模塊,但是編譯器還是會抱怨沒有找到function。我仍然必須使用module.function()

它有更多的功能,所以我不希望由一個重新定義他們一個只是儘可能避免打字module

+2

你知道'從模塊導入*'嗎? – isedev 2013-03-17 14:13:37

+0

謝謝我認爲這是隱式完成的功能。現在它可以工作。有沒有辦法限制導入到所有功能?因爲它也有其他類型,只是想知道。 – 2013-03-17 14:15:27

+1

在你的'module'中,你可以定義一個名爲'__all__'的變量,它包含了所有將被'*'導入的名字。 – 2013-03-17 14:17:41

回答

5

在Python導入只是增加了東西到您的命名空間。您如何限定導入的名稱是import foofrom foo import bar之間的差異。

在第一種情況下,你只會導入的模塊名foo,這就是你將如何在它達到什麼,這就是爲什麼你需要做foo.bar()。第二種情況,你明確地只導入bar,現在你可以這樣調用它:bar()

from foo import *將導入所有的可導入名稱(在那些特殊的變量定義__all__)到當前的命名空間。這雖然有效 - 不推薦使用,因爲您最終可能會意外覆蓋現有名稱。

foo = 42 
from bar import * # bar contains a `foo` 
print foo # whatever is from `bar` 

最好的做法是導入任何你需要:

from foo import a,b,c,d,e,f,g

或者你可以別名名稱

import foo as imported_foo

底線 - 儘量避免from foo import *