[python] Buducnost Pythonu: lambda, map, filter
superman
feed na centrum.cz
Pátek Listopad 10 12:46:14 CET 2006
> O osudu lambda se diskutovalo na comp.lang.python. Osobně jsem
> lambda nikdy nepotřeboval. Jakékoliv jeho použití v Pythonu
> se podle mě dá jednoduše přepsat bez lambda způsobem, který
> je proti lambda přehlednější a srozumitelnější.
Jako bych slyšel Javisty :-) Já jsem naopak člověk, který miluje
syntakticky bohaté jazyky a logicky vystavěné jazyky (samozřejmě musí
být dobře navržené), proto jsem miloval C++, proto miluju Python, proto
jsem omezil Lisp a Javu. Jsem člověk, který má rád volnost a množství
výrazových prostředků a dokážu je opravdu využít. Produkuji srozumitelné
programy, až moc. To mi bohužel kazí kšefty.
Osobně lambda především omezuje zbytečné definice krátkých funkcí, které
se použijí jednorázově. To může zpřehlednit maximálním způsobem zdrojový
kód. Přepsat se samozřejmě dá všechno, protože je matematicky dokázáno,
že jakýkoli algoritmus se dá napsat pouze s podmíněným skokem. Cokoli
nad to je navíc, když půjdeme do teorie. Nicméně v teorii bych se nerad
pohyboval a v praxi bych nerad připustil jazyk na dolní hranici
teoretických vyjadřovacích možností.
> Přiřazení jako výraz působí komplikace protože se
> v boolovských výrazech může poplést == s =.
To je bohužel problém Pythonu, že umožňuje do logických operátorů zavést
i jiné, než logické typy. Tohle v jazycích nesnáším, tahle vlastnost je
"error prone" a bohužel jí hodně tvůrců jazyka z nějakého, pro mě
sadistického důvodu zavádí. Tohle bohužel dobře ošetřila Java, nebo
Pascal, že logické operátory musejí mít jako operandy pouze logické
typy. Pak rozhodně není žádný problém s = a ==. Takže problém, který
popisujete je sekundární.
Díky té blbosti, že logické výrazy pracují i s nelogickými typy je
Python závislý na kontextu. Tentýž výraz znamená něco jiného v podmínce
a něco jiného mimo podmínku. Nechápu proč prostě dovolovat podmínky typu:
a = 2
if a:
print "je to tam"
Já bych si přál jazyk, který striktně přikazuje napsat:
a = 2
if a != 0:
print "je to tam"
Kdybych já byl Rossum a dělat Python s nekompatibilní syntaxí, tak mezi
prvními by byl požadavek, že logické výrazy budou pracovat jen s
logickým typem a nic jiného, než false a true do logických výrazů se
nepovoluje. Tím by se vyloučilo spoustu chyb a přestal by být problém
mezi = a ==, což by se mohlo okamžitě zavést, tedy přiřazení by mohlo
být výrazem, ne příkazem jako je to teď.
> Python je procedurální a nikoliv funkcionální jazyk.
> Z funkcionálních zápisů v něm fungují jen ty věci,
> které se dají JEDNODUŠE převést na procedurální postup.
> Jiné výhody funkcionálních jazyků zde odpadají (například
> automatická paralelizace výpočtu).
A taky se právě bavíme o tom, že i to, co zde z funkcinálního jazyka být
může a je se má vyhodit. Tohle už není o tom, jaký je to jazyk. Jde o
hrubé PORUŠENÍ ZPĚTNÉ KOMPATIBILITY jazyka, a pokud vím, zatím žádný
jazyk tohle nepřežil ve zdraví. Já si opravdu za svých dvacet let co se
v této oblasti pohybuji nepamatuji jediný jazyk, který by hrubě porušil
zpětnou kompatibilitu a vzápětí nevymřel. Osobně nemám důvod si myslet,
že Python 3000 nebude zároveň jeho R.I.P.. Právě plány s Pythonem 3000
ve mě rozsvěcují varovné světélko a říkají, tak takhle končí jazyk.
> Navrhuji rozebrat několik případů, kde se používají
> lambda, map, filter, reduce a pohádat se o alternativním
> zápisu jinými prostředky jazyka Python ;-)
Já se nechci hádat o alternativním zápisu. Mě jsou takovéto hádky
ukradené. Prostě lambda, map, filter, reduce tam v Pythonu již jsou a z
toho vyplývá, že tam mají zůstat. A nebo tam neměly nikdy být. Tyhle
hádky měly skutečný smysl v době návrhu jazyka, teď už jsou pasé.
Teď to tam je, a pak by tam podle Zen of Miloslav Ponkrác:
1) Budeš v maximální možné míře dodržovat zpětnou kompatibilitu
2) Jazyk, který kdy v historii hrubě porušil zpětnou kompatibilitu vymřel.
Tak podle tohoto Zenu nemá Python vůbec nárok tyto věci z jazyka vyhazovat.
A jinak cokoli se dá převést na podmíněný skok. Cokoli jiného je
zbytečné, takže puristicky lze vyhodit toho z Pythonu spoustu. Tipuji,
že 90% featur z Pythonu se dá zapsat jinými prostředky, záleží jen co si
vezmete na paškál. Kdo chce psa bít, hůl si najde.
Miloslav Ponkrác
Další informace o konferenci Python