[python] Seznamy

Radek Holý radekholypublic na gmail.com
Úterý Únor 10 20:36:06 CET 2015


Dne 10. února 2015 10:18 Vladimir Macek <macek na sandbox.cz> napsal(a):

> 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.
>

Tak když už jste se v tom rozhodli původnímu tazateli udělat takový guláš,
tak já se taky přidám :-) V Pythonu dělám skoro 9 let a pořád platí, že
kdykoliv někde narazím na "reduce", "map" apod. tak mě to vždy zdrží a
chvíli mi trvá, než pochopím o co jde. List comprehensions se mi čtou
snadněji - přirozeněji. Nehledě na to, že ty funkcionální záležitosti jsou
skoro vždy spojené s deklarací jinak zbytečných funkcí se složitým
významem, nebo ještě komplikovanějšími lambda funkcemi. Každopádně je to
prostě otázku vkusu/zvyku... Jedním z problémů může pro mě být ta prefixová
notace. Vypadá to jako Lisp :-)

Ještě mě zarazilo to "stáhneme 10 URL". S tím mám vždy osobní problém.
Jakmile někdo volá "map", aniž by ho zajímala návratová hodnota volané
funkce, považuji to za chybu. Nehledě na to, že v Pythonu 3 "map" vrací
iterátor, takže se kvůli tomu ještě typicky "map" obaluje do "list"... V
těchto případech vždy preferuji klasický "for" cyklus. Ale opět je to jen
můj názor.
-- 
Radek
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20150210/fcd9c7d6/attachment.html>


Další informace o konferenci Python