2013-04-12 19 views
6

Wiem, że to głupie pytanie, ale dopiero zaczynam uczyć się Pythona i nie mam dobrej wiedzy na temat Pythona. Moje pytanie brzmi: jaka jest różnica międzyRóżnica między import tkinter jako tk i from tkinter import

from Tkinter import * 

i

import Tkinter as tk 

? Dlaczego nie mogę po prostu pisać

import Tkinter 

ktoś może poświęcić kilka minut, aby mnie oświecić?

Odpowiedz

11

from Tkinter import * importuje każdy eksponowany obiekt w aplikacji Tkinter do bieżącego obszaru nazw. import Tkinter importuje „namespace” Tkinter w przestrzeni nazw i import Tkinter as tk robi to samo, ale „zmienia nazwę” to lokalnie do „tk” aby zapisać wpisywanie

powiedzmy mamy moduł foo, zawierający klasy A, B i C.

Następnie import foo daje dostęp do foo.A, foo.B i foo.C.

Po dokonaniu import foo as x masz dostęp również do nich, ale pod nazwami x.A, x.B i x.C. from foo import * importuje A, B i C bezpośrednio w bieżącym obszarze nazw, dzięki czemu można uzyskać do nich dostęp z A, B i C.

Istnieje również from foo import A, C wich zaimportuje A i C, ale nie B do bieżącego przestrzeń nazw.

Można również wykonać from foo import B as Bar, co spowoduje, że B będzie dostępne pod nazwą Bar (w bieżącym obszarze nazw).

Tak ogólnie: jeśli chcesz tylko jeden obiekt modułu, wykonaj from module import object lub from module import object as whatiwantittocall.

Jeśli potrzebujesz funkcji niektórych modułów, musisz wykonać import module lub import module as shortname, aby oszczędzić ci pisania.

from module import * jest odradzane, ponieważ możesz przypadkowo zamaskować ("przesłonić") nazwy i może stracić to, które obiekty należą do tego modułu.

+0

tak, to czy ma więcej mocy obliczeniowej, aby użyć „import foo”, jeśli jestem tylko jeden użycie będzie klasa (np. klasa A). Czy zamiast tego powinienem użyć "z foo importu A"? czy różnica jest znikoma? Przy okazji, świetne wytłumaczenie dla początkującego, jak ja. dzięki! –

+0

Obawy związane z wynikami importu są a) nieistotne i b) nieistotne. Rób to, co najbardziej ci odpowiada, a nie implementację pytona. 'from foo import A' jest szybszy w wyszukiwaniu później, gdy używasz A, ale pythoniści na ogół nie dbają o takie rzeczy. – ch3ka

3

Można oczywiście użyć

import Tkinter 

Jeśli jednak to zrobić, trzeba by poprzedzić każdą Tk klasy nazwę korzystania z Tkinter..

Jest to dość niewygodne.

Z drugiej strony, co następuje:

import Tkinter as tk 

pomija ten problem tylko wymagające wpisania tk. zamiast Tkinter..

, aby:

from Tkinter import * 

jest ogólnie zły pomysł, ze względów omówionych w Should wildcard import be avoided?

Powiązane problemy