[python] import

Zdenek Pavlas pavlas na nextra.cz
Čtvrtek Březen 11 10:15:26 CET 2004


azurIt wrote:

> potrebujem a pouzivam, cize ci je lepsje urobit 'import socket' 
> alebo 'from socket import socket, AF_INET, SOCK_STREAM, error' ?

Zalezi pripad od pripadu. Pokud z modulu pouzivate vice nez 2-4 
symboly, nebo hrozi kolize jmen, je lepsi prvni pripad. Pokud 
importujete jen jednu fuknci, je lepsi druhy pristup. Treti 
varinata (from x import *) je v Pythonu omylem :P

Pro modul 'socket' je urcite lepsi 'import socket', minimalne proto
ze mit globalni symbol 'error' == 'socket.error' je pekna blbost.

Nuti vas k tomu take dalsi chyba Pythonu, a sice select.error,
ktery je nepochopitelne ruzny od socket.error, a ani jeden neni 
podtridou toho druheho, takze v except: musite vzdy uvadet oba.

> lepsi ten druhy sposob ale takmer vsade (napr. help ku pythonovi) sa 
> pouziva ten prvy ;)

Nejlepsi je pouzivat prvni zpusob, druhy pouze v pripade ze
importujete symboly ktere soucasne 1) se nevyskytuji i v jinych 
modulech, 2) nemeni se (tj nejde o globalni literal, ktery jine
funkce nastavuji) 3) nedelate reload (modul). 

Co do rychlosti je 'modul.symbol' o jeden dict lookup pomalejsi,
ale pokud je to opravdu potreba urychlit (uvnitr opakovane smycky),
muzete vzdy mimo smycku udelat symbol = modul.symbol, a pak 
se odkazovat primo. Mnohem casteji ale volate metody objektu 
nez globalni funkce v jinych modulech, takze to stejne
nepotrebujete delat :)

-- 
Zdenek Pavlas
Application Developer
NEXTRA Czech Republic s.r.o.  http://www.nextra.cz
V Celnici 10 / CZ - 117 21 Praha 1 / Czech Republic
Tel: +420/2/96 355 111
E-Mail: zdenek.pavlas na nextra.com

Contact address:
Dům Scala / Moravské nám. 3 / 602 00 Brno, Czech Republic
Tel: +420/5/43 554 170
Fax: +420/5/43 554 112, 214
See Disclaimer http://www.nextra.cz/disclaimer




Další informace o konferenci Python