2011-01-08 13 views
5

Jaka jest różnica między tymi dwoma liniami?`from x import y` vs.` from x.y import * `

from PyQt4 import QtGui 
from PyQt4.QtGui import * 

Pierwszy wiersz to "import klasy QtGui z modułu PyQt4".
Ale co oznacza druga linia? "Importuj wszystko z QtGui z modułu PyQt4".
Czy to nie to samo?

+2

Pierwsze importu moduł do bieżącej przestrzeni nazw, drugi import wszystko od tej przestrzeni nazw własnych modułów do bieżącej przestrzeni nazw. –

+0

Należy zauważyć, że druga forma jest wysoce odradzana - patrz http://docs.python.org/howto/doanddont.html#from-module-import z tego powodu. – delnan

Odpowiedz

10

Pierwsze polecenie importuje określony moduł do bieżącego obszaru nazw.
Druga instrukcja importuje wszystko z podanego modułu do bieżącego obszaru nazw.

Więc 1) oznacza, że ​​nadal trzeba jawnie odwoływać żadnych klas/funkcji itp pośrednictwem modułu przestrzeni nazw
2) oznacza, że ​​nie

Oto porównanie i kontrast, który pokazuje różnicę

1)

import math 

d = math.sqrt(10) 

2)

from math import * 

d = sqrt(10) 

pamiętać, że można zaimportować konkretnego symbolu z modułu jeśli chcesz to

from math import sqrt 
d = sqrt(10) 
0

Pakiety mogą eksportować więcej niż jedną rzecz. Różnica polega na tym, że pierwszy wiersz importuje pojedynczy obiekt z pakietu, a drugi importuje wszystko. Jeśli importowany pakiet eksportuje tylko jedno, dwa są synonimami.