[python] Seznamy

Honza Král honza.kral na gmail.com
Úterý Únor 10 20:50:48 CET 2015


2015-02-10 20:36 GMT+01:00 Radek Holý <radekholypublic na gmail.com>:
>
> 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 :-)

Vidim to uplne stejne, proto jsem byl prekvapen kdyz tady slysim
zastance filter/map/... Ja osobne se k nim skutecne uchyluji jen obcas
kvuli vykonu a v situaci kdy je naprosto jasne, co to bude delat.

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

Naprosty souhlas, parkrat jsem videl volani map ci list comprehension
bez zajmu o vysledek a take s tim mam problem - je to plytvani
(zbytecne se alokuje list) a je to hure citelne.

Mimochodem v python3 uz reduce ani neni builtin (byl presunuty do
functools) a i Guido to vidi obdobne:
http://www.artima.com/weblogs/viewpost.jsp?thread=98196


> --
> Radek
>
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz


Další informace o konferenci Python