[Tutor PyCZ] ještě seznam jako globální proměnná
Petr Prikryl
PrikrylP na skil.cz
Středa Březen 28 07:49:42 CEST 2007
Jan Šimůnek
> [...]
> děkuji za včerejší rady, snad to bude fungovat [...]
Z těch rad bych si vybral především to vyhýbání se
globálním proměnným.
> Dělám grafický formulář, do kterého se údaje naklepou
> myší z OptionMenu (mnoha), takže je potom nutné takto
> nastavené proměnné hromadně zpracovat a uložit jako
> řádek do databáze. Takže nemohu volat parametry této
> funkce, tu nechávám uživatele volat až když je vše
> nastaveno. Seznamy by mě měly ušetřit
> kód, abych nemusel psát do nekonečna:
>
> vyberA=StringVar()
> vyberA.set("0")
> vyberB=StringVar()
> vyberB.set("0")
>
> atd. ...
>
> a potom
>
> def zpracovani():
> global vyberA
> global vyberB
> atd. ...
>
> do zblbnutí, protože těch výběrů je několik desítek.
Odhaduji, že by dané parametry bylo lepší sbírat
do struktury, které se v Pythonu říká slovník,
v C++ map a obecně vyhledávací tabulka.
d = {} # prázdný slovník
d['volba1'] = True
d['volba3'] = '0'
d['graf.typ3'] = 14
atd.
Funkci zpracování pak mohu předat slovník jako
celek.
def zpracuj(D):
for klic in D:
...zohledni D[klic]
...nebo
if D['volba1']:
...
> (Obávám se, že jediným "přínosem" koncepce objektového
> programování je, že 90% zdrojového textu programu
> je v porovnání s procedurálním programováním jen
> naprostý balast.)
Podle mého odhadu jste k tomu ještě dostatečně
nepřičichnul a neměl byste to hodnotit. Jsou oblasti,
kdy je objektově orientované programování zbytečné,
ale u praktických problémů je jich málo. Většinou
je OOP lepší (ne z akademických důvodů, ale protože
se s tím líp pracuje). Je to, jako kdybyste tvrdil,
že rýč je lepší než motyka, protože se s ním ta hlína
líp uplácává. Musíte změnit přístup. Musíte k tomu
přistoupit nezaujatě a hledat, co se tím asi myslí.
Prostá funkce je někdy určitě lepší, než třída
a její metody. Použité nástroje musí odrážet
způsob myšlení. Při programování převádíte své
myšlenky na formálnější zápis. U OOP musíte
jinak myslet. Možná jste si zvykl myslet moc
procedurálně (data + algoritmus = program).
Zkuste se na to dívat jako na spolupracující
kousky, personifikujte si je do role specialistů,
kteří poskytují své služby.
> Takže pokud by se proměnné z OptionMenu daly
> stáhnout do seznamů (po logických celcích),
> což jde při jejich deklaraci pomocí cyklu,
> to jsem už vyzkoušel, a ty seznamy jednoduše
> nastavit jako globální (a ne položku po položce),
> pak by to byla velká úspora kódu.
Těžko se o tom bavit bez hlubší znalosti vašeho
problému a přístupu. Chce to samostatnější příklad,
na kterém ukážete, jak to děláte a jaký je celkový
záměr.
pepr
Další informace o konferenci Tutor