<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">Dne 10. února 2015 10:18 Vladimir Macek <span dir="ltr"><<a href="mailto:macek@sandbox.cz" target="_blank">macek@sandbox.cz</a>></span> napsal(a):<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 9.2.2015 21:50, Jan Bednařík wrote:<br>
><br>
>     > Mě se líbí explicitní použití funkcí map() a filter(), protože je to pro začátečníka čitelnější a<br>
>     pochopitelnější, než List Comprehension<br>
><br>
>     Tohle me zajima - ja mam presne opacnou zkusenost. Bavime se o<br>
>     zacatecnicich v programovani (s temi mam zkusenost ja), ci jen<br>
>     zacatecniky s pythonem, ale programatory?<br>
><br>
><br>
> Myslím si, že pro člověka, který vidí poprvé map a filter a List<br>
> Comprehension, je snažší najít si v dokumentaci co dělají funkce map a<br>
> filter a pochopit je samostatně. Protože to jsou dvě oddělené věci.<br>
> Zatímco když se použije List Comprehension kombinující map i filter v<br>
> jednom zápise, tak je tam toho na rozluštění a pochopení více. A taky ten<br>
> List Comprehension nejde snadno dohledat v dokumentaci, protože z kódu<br>
> není poznat, jak se to jmenuje (neobsahuje klíčová slova jako "map" či<br>
> "filter").<br>
><br>
> Nějakou zásadnější osobní zkušenost s výukou nemám. Ale minimálně na<br>
> škole jsem se setkal s tím, že se úplní začátečníci učí nejdříve<br>
> funkcionální paradigma, tak by ten map a filter mělo být snadné pochopit<br>
> pro kohokoliv. Nicméně naučit se místo toho v Pythonu rovnou List<br>
> Comprehension určitě není na škodu.<br>
><br>
> Honza<br>
<br>
</span>Přispěju k diskusi Honzů.<br>
<br>
Nikdy jsem o tom vážně nepřemýšlel, ale asi mám ve svém kódu sklony vybrat<br>
to, co je méně ukecané. Comprehension a Gen. exp. (dále C-G) někdy<br>
potřebují až třikrát zopakovat řídicí proměnnou, zatímco filter si vystačí<br>
s žádnou nebo třeba jedinou zmínkou. Takže někdy preferuju map a filter.<br>
Reduce přijde ke slovu zřídka, což je asi přirozené.<br>
<br>
Souhlasím s již dříve popsanou výhodou jednoduchosti pochopení<br>
funkcionálních konstruktů, které dělají jednu věc, zatímco C-G jich<br>
kombinují několik. Je to švýcarský nůž a může pythonistům připadat hrozně<br>
šikovný. Ale mě se ne vždy líbí ta ukecanost (řádek je dlouhý, často<br>
zalomený) a překombinovanost.<br>
<br>
Nemám to exaktně potvrzeno hlasováním, ale když na školeních Pythonu učím,<br>
necítím z posluchačů zvláštní nadšení, když se probírá C-G. Některé udiví,<br>
co se tím dá dělat, když vyrobíme mocniny lichých čísel nebo stáhneme 10<br>
URL. Ale možná je to tak, že to je pro ně další nástroj, který je unikátní<br>
a tudíž stojí energii navíc se ho učit.<br>
<span class="HOEnZb"><font color="#888888"><br>
V.</font></span><br></blockquote></div><br></div><div class="gmail_extra">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 :-)<br><br></div><div class="gmail_extra">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.<br>-- <br></div><div class="gmail_extra">Radek<br></div></div>