[python] omezeni globalniho slovniku

Hynek Fabian hynek.fabian na firma.seznam.cz
Pátek Březen 4 19:42:34 CET 2011


Pokud si chces nechat poradit, pak je to samozrejme jina.

1) exec nepotrebujes na zmenu lokalnich promenych. To cemu rikas "promenne" 
jsou ve skutecnosti jen jmena ve jmennych prostorech, v podstate obycejne 
slovniky. A na zmenu slovniku existuji lepsi zpusoby, vime?
V nejjednodussi verzi by tedy stacilo obalit pozadovanou funkcnost do funkce 
nebo metody ktera vrati slovnik. Potom staci neco ve stylu: 

locals().update(othervariables)

Vraceny slovnik muzes predem zkontrolovat na pricetnost (jenom kafe), doplnit 
jmenum nejaky unikatni prefix... fantazii se meze nekladou. Uplne stejne muzes 
presypat promene do instance, tridy nebo modulu do atributu __dict__. Dokonce 
bys mel, protoze narozdil od znasilnovani locals() je to z hlediska 
interpretru legalni.

2) exec nepotrebujes na pristup k promenlivym strukturam. Pokud mas nejakou 
'freeform' strukturu, (dejmetomu strom uzlu v xml dokumentu) a chces predat 
'cestu; k nejakemu uzlu ktery urcis az za behu, nemusis se matlat s 
generovanim syntakticky spravneho textu programu pro exec 
("rootnode.node[n].childnode[attr]"), ale proste si onu cestu vyjadris jako 
funkci:

worknode = lambda x: x.node[n].childnode[attr]

Muzes se samozrejme odkazovat na lokalni promenne cimz vznikne klasicka 
uzavera (closure). Takovou funkci (nemusi byt v lamda forme, ale vetsinou je 
tak citelnejsi) muzes predat dal jako jakykoliv jiny objekt.


3) exec nepotrebujes k dynamickemu nacteni modularniho kodu, na to je mnohem 
lepsi builtin __import__, ktery importovany kod zaroven opatri vlastnim 
jmennym prostorem a vubec klasickym komfortem. Konkretni pouziti zavisi na tom 
ceho chces vlatne dosahnout.

Zapomel jsem na neco?


Martin B. (Friday 04 of March 2011 12:48:56):
> V Fri, 4 Mar 2011 12:00:58 +0100
> 
> Hynek Fabian <hynek.fabian na firma.seznam.cz> napsáno:
> > > Nechci rozebirat jestli je to dobre nebo ne ale proste to tak
> > > potrebuju.
> > 
> > Jsi pitomec. Nechci rozebirat jestli je to fer nebo ne ale proste to
> > tak je.
> 
> Oops, Tvuj nazor vyvracet nehodlam natoz komentovat.
> 
> > Bezne se k invektivam uchyluji nerad, ale tehle se nedalo odolat :-p
> > Nechapu kde vubec beres drzost ptat se na radu a zaroven predem
> > odmitat nejlepsi odpoved jakou ti mnohem zkusenejsi borci mohou dat.
> 
> Drzost? Nerekl bych.
> Potrebuju != odmitat lepsi radu. Nikde nepisu ze se nenecham premluvit
> k lepsimu reseni a nechci si nechat poradit.
> 
> Prinos tve odpovedi k reseni anebo nedejboze nejake jine reseni ... 0%.
> Mel by ses proste nektere veci naucit prejit s klidem.
> 
> > _______________________________________________
> > Python mailing list
> > Python na py.cz
> > http://www.py.cz/mailman/listinfo/python
> 
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python


Další informace o konferenci Python