[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