2013-04-12 63 views
6

我知道這是一個愚蠢的問題,但我剛剛開始學習python,並且我對python沒有很好的瞭解。我的問題是什麼?爲什麼我不能只寫導入tkinter作爲tk和tkinter導入的區別

from Tkinter import * 

import Tkinter as tk 

的區別

import Tkinter 

任何人都可以花幾分鐘分鐘賜教?

回答

11

from Tkinter import *將Tkinter中的每個暴露對象導入當前命名空間。 import Tkinter進口「命名空間」的Tkinter在你的命名空間和 import Tkinter as tk不相同,但「重命名」在本地爲「TK」,以節省您的打字

假設我們有一個模塊FOO,含有類A,B ,和C.

然後import foo可讓您訪問foo.A,foo.B和foo.C.

當你做import foo as x你也可以訪問這些,但名稱爲x.A,x.B和x.C. from foo import *將直接在您的當前名字空間導入A,B和C,這樣你就可以用A,B訪問它們,和C.

還有from foo import A, C至極將導入A和C,但是不是B到當前命名空間。

您也可以做from foo import B as Bar,這將使B在名稱欄(在您當前的命名空間中)可用。

所以一般情況下:當你只需要一個模塊的一個對象時,你可以做from module import objectfrom module import object as whatiwantittocall

當您想要某些模塊功能時,您可以使用import moduleimport module as shortname來節省輸入。

from module import *不鼓勵,因爲您可能會意外地遮蓋(「覆蓋」)名稱,並且可能會失去跟蹤哪些對象屬於哪個模塊。

+0

所以討論的原因,它需要更多的處理能力,可使用「進口富」如果我只打算用一個類(例如A類)。我應該使用「從foo導入A」來代替嗎?或者差異可以忽略不計?順便說一句,對於像我這樣的初學者很好的解釋。謝謝! –

+0

關於進口的性能問題是a)微不足道的,b)不相關的。做什麼最適合你,而不是Python的實現。 '從foo導入A'在以後使用A時查找速度更快,但pythonists通常不關心這樣的事情。 – ch3ka

3

你當然可以使用

import Tkinter 

但是,如果你這樣做,你必須前綴你Tkinter.使用每一個Tk的類名。

這很不方便。

在另一方面,以下內容:

import Tkinter as tk 

只要求你輸入tk.而不是Tkinter.迴避的問題。

至於:

from Tkinter import * 

它通常是一個壞主意,在Should wildcard import be avoided?