[python] Seznamy

Vladimir Macek macek na sandbox.cz
Úterý Únor 10 10:18:03 CET 2015


On 9.2.2015 21:50, Jan Bednařík wrote:
>
>     > Mě se líbí explicitní použití funkcí map() a filter(), protože je to pro začátečníka čitelnější a
>     pochopitelnější, než List Comprehension
>
>     Tohle me zajima - ja mam presne opacnou zkusenost. Bavime se o
>     zacatecnicich v programovani (s temi mam zkusenost ja), ci jen
>     zacatecniky s pythonem, ale programatory?
>
>
> Myslím si, že pro člověka, který vidí poprvé map a filter a List
> Comprehension, je snažší najít si v dokumentaci co dělají funkce map a
> filter a pochopit je samostatně. Protože to jsou dvě oddělené věci.
> Zatímco když se použije List Comprehension kombinující map i filter v
> jednom zápise, tak je tam toho na rozluštění a pochopení více. A taky ten
> List Comprehension nejde snadno dohledat v dokumentaci, protože z kódu
> není poznat, jak se to jmenuje (neobsahuje klíčová slova jako "map" či
> "filter").
>
> Nějakou zásadnější osobní zkušenost s výukou nemám. Ale minimálně na
> škole jsem se setkal s tím, že se úplní začátečníci učí nejdříve
> funkcionální paradigma, tak by ten map a filter mělo být snadné pochopit
> pro kohokoliv. Nicméně naučit se místo toho v Pythonu rovnou List
> Comprehension určitě není na škodu.
>
> Honza

Přispěju k diskusi Honzů.

Nikdy jsem o tom vážně nepřemýšlel, ale asi mám ve svém kódu sklony vybrat
to, co je méně ukecané. Comprehension a Gen. exp. (dále C-G) někdy
potřebují až třikrát zopakovat řídicí proměnnou, zatímco filter si vystačí
s žádnou nebo třeba jedinou zmínkou. Takže někdy preferuju map a filter.
Reduce přijde ke slovu zřídka, což je asi přirozené.

Souhlasím s již dříve popsanou výhodou jednoduchosti pochopení
funkcionálních konstruktů, které dělají jednu věc, zatímco C-G jich
kombinují několik. Je to švýcarský nůž a může pythonistům připadat hrozně
šikovný. Ale mě se ne vždy líbí ta ukecanost (řádek je dlouhý, často
zalomený) a překombinovanost.

Nemám to exaktně potvrzeno hlasováním, ale když na školeních Pythonu učím,
necítím z posluchačů zvláštní nadšení, když se probírá C-G. Některé udiví,
co se tím dá dělat, když vyrobíme mocniny lichých čísel nebo stáhneme 10
URL. Ale možná je to tak, že to je pro ně další nástroj, který je unikátní
a tudíž stojí energii navíc se ho učit.

V.



Další informace o konferenci Python