Komentáře k článku
Python profesionálně: dynamické parametry, generátory, lambda funkce a with

V minulém díle jsme se podívali na několik jednoduchých syntaktických tipů, které nám usnadní vývoj v programovacím jazyce Python. Dnes navážeme generátory, lambda funkcemi, with konstrukcemi a dynamickými parametry.
díky
fakt díky,dobrý článek… jen bych dodal, že kwds se (možná i častěji) pojmenovává jako kwargs
a jsem opravdu rád za dictionary comprehensions v py3.x :) super, díky
Generatorove slovniky
Ahoj, generatorove slovniky jsou zavedeny jiz ve verzi 2.7.
Re: Generatorove slovniky
Jeste pro poradek http://docs.python.org/dev/whatsnew/2.7.html
díky
Moc děkuji za tento seriál. Dneska to pro mne bylo sice spíše opakování známého, ale zase v minulém dílu byly triky, které jsem neznal a které se mi líbily. Těším se na další pokračování a ať Vám chuť do psaní vydrží.
Petr
Re: Python profesionálně: dynamické parametry, generátory, lambda funkce a with
Na contextmanagery se výborně hodí yield, try/finally a contextlib:
http://docs.python.org/library/contextlib.html#contextlib.contextmanager
Více myšlenek
Pokud lze ještě nějak ovlivnit obsah budoucích článků, tak bych chtěl poprosit, aby to bylo více zaměřené na myšlenky, best practice nebo zkrátka něco, co je více vzdáleno syntaxi jazyka. Seriál zatím na mě působí jako ukecanější seznam „tipů a triků” pro Python a to si můžu přečíst jinde. Na Stack Overflow je jich celá hromada a zatím se v těchto dvou dílech neobjevilo snad nic, co by nebylo i v tomto seznamu.
http://stackoverflow.com/questions/101268/hidden-features-of-python
Re: Více myšlenek
První dva díly seriálu byly zaměřené na syntaxi a dle ohlasů to čtenářům pomohlo, takže se i nadále tomuhle přístupu nijak striktně vyhýbat nebudeme. Další díly jsou už posunuté jinam, uvidíme, zda vyhoví i vám.
Re: Více myšlenek
a syntax highlighter nebude? alebo je taky problem pridat par riadkov js kodu? ak ano tak mi dajte pristup na ftp a ja to updatnem aj sam.
Re: Více myšlenek
Highlighter bude. Co znamená onen *taky* problém? S tím ftp je to v dnešní době už trochu naivní, ten tu nepěstujeme 8-)
Re: Více myšlenek
Slovensky „taký“ je česky „takový“ ;-)
Re: Více myšlenek
Ach tak. Na slovenčinu bez diakritiky si na příště budu muset pořídit tlumočníka 8-)
Re: Více myšlenek
Tak to je super.. vďaka.
Re: Více myšlenek
Osobně mi stávající přístup zcela vyhovuje. Stack Overflow je sice web ke nezaplacení, ale domnívám se, že formát, který je zde zvolený, je ideální (detailnější vysvětlování, popisnost, dobře volené příklady).
Seriál
Díky za perfektní seriál, těším se na další článek :-)
Generátor
Já bych měl dotaz k těm generátorům. Je to speciální pojem v Pythonu nebo se to obvykle používá? Já to znám z jiných jazyků pod anglickým termínem „list comprehension“ a už dlouho hledám český termín.
Re: Generátor
List comprehension je něco jiného než generátor.
Re: Generátor
Ta terminologie je tam trosku zmatena.
– *Iterator* je objekt, ktery ma specialni API (hlavne __inter__ metoda), diky kteremu jde vkladat jednoduse od for cyklu (apod.) Tzn
for x in my_custom_iterator:
pass
– *Generator funkce*, ktera zjednodusuje vyvareni interatoru tak, ze nemusite definovat celou tridu, pouzice fci, ktera ma yield.
def my_custom_iterator():
yield 1
yield 2
– *Generator expression* je dalsi zjedoduseni, kde neni treba pouzivat ani funkci, pouze vyraz kratky vyraz ve stylu:
my_custom_iterator = (i for i in …)
Tzn. oboje je v zasade syntactic sugar, jak vytvorit objekt s iterator API.
– *List comprehension* je zjednoduseny zapis na vytvareni listu.
[ x for x in … ]
Interatory to jsou v zasade vsechno.
Za generatory se obvykle oznacuje generator expression, nebo generator fce. A dava se tim (podle kontextu) najevo, ze nejde o list comprehension (apod) a tedy ze se nevygeneruji vsechny prvky predem, ale generuji je postupne s kazdym pruchodem cyklu.
Re: Generátor
Souhlas, clanek je trochu zmateny co se tyce rozdilu mezi iterator, iterable, generator, generator expression a list/dict comprehension.
Jinak pro upresneni (kdyz uz jsem za hnidopicha ;) ): __iter__ je magicka metoda ktera ma vracet iterator (je volana built-in funkci iter()), iterator je v podstate cokoliv co ma metodu .next() ktera vraci prvky a vyhodi StopIteration na konci. Iterable je pak cokoliv co ma metodu __iter__. V praxi to funguje tak, ze kdyz napisu
for x in cokoliv
tak se na cokoliv zavola __iter__() a na vracene hodnote se vola .next() do te doby dokud nenastane vyjimka StopIteration a predava se do promenne x.
Re: Generátor
Ještě malé doplnění – v Pythonu verze 3 byla Honzou zmíněná metoda next přejmenována na __next__
Sort + DRY
Diky za clanek, pridavam par pripominek a doplnujicich informaci.
Prosim nepouzivejte parametr cmp pro sort pokud to neni absolutne nutne. Parametr key dokaze v 99.9% pripadu dosahnout toho sameho jednoduseji a efektivneji (je zavolany jen jednou na kazde hodnote v listu):
dates.sort(key=lambda x: x.isoweekday())
casto ani neni potreba psat vlastni lambdu a da se pouzit operator.attrgetter a operator.itemgetter, navic v pythonu 3.X uz cmp= parametr u sort funkci ani neni. Vice info na: http://wiki.python.org/moin/HowTo/Sorting
Autor spravne kritizuje ze neni dobre kopirovat na vsechna mista kde se pouziva nejaky iterator nejaky kod a pak navrhuje zlepseni ktere spociva v tom ze na dana mista nakopiruje jiny kod – obalujici funkci. To je zajiste zlepseni ale stale to neni v souladu s „DRY“ – v tomhle pripade by bylo mnohem vhodnejsi naimplementovat lazy loading tak, aby kdyz nekdo pristoupi na atribut (ci cokoliv jineho) na objektu ktery neni nacten, tak se objekt dotahne. Tim padem se programator nemusis starat o obalovani kodu vsude (coz je znacny prohresek proti DRY) a zaroven se tak zaruci to ze se nikdy nedotahuje nic zbytecne.
Pythonista
Nechci autora urazit, ale připadá mi, že s Pythonem zas tak moc velké zkušenosti nemá. Nemá jasno v terminologii, zvyklostech (kwargs), ani best-practices. Nezná Honzu Krále:) Jinak článek je to docela dobrý, pěkně se čte, rád si osvěžím svoje znalosti, ale pro někoho, kdo si nedokáže opravit drobné nepřesnosti, může být zavádějící.
Asi se potřebuju vyspat...
Asi se potřebuju vyspat a přečíst si to zejtra znova O_o
Re: Python profesionálně: dynamické parametry, generátory, lambda funkce a with
Zřejmě ještě stále nejste v Pythonu zběhlý.
Titulek musí být dlouhý alespoň 4 znaky
Jestli je soubor zavrenej se imo cistejc zjistuje pomoci f.closed a ne tim, ze se do nej pokousim zapsat ;)