Re: [python] jméno typu
Je to zle v pythone... Nedokaze to rozparsovat, nakolko 3. bere ako zaciatok desatinneho cisla ale: (3).__add__(4) uz ide Díky, takže špatný parser v Pythonu. Ale tahle obezlička stačí. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Buducnost Pythonu: lambda, map, filter
Petr Prikryl wrote: Jde o to, že Python může k reduce a lambda nabídnout alternativy, které nelze srovnávat s primitivností podmíněného skoku. Ty alternativy mi připadají lepší než reduce/lambda. Dobře, tohle mě zajímá: Jakou alternativu nabízí Python k foldl (které si přejmenoval na „reduce“)? U map je to jasné, přeci jen list comprehension ani generator expression nejsou o moc horší, navíc generator expression má lazy sémantiku, což je Good Thing(TN). Ale u toho reduce() trošku tápu. Jakub Hegenbart ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Buducnost Pythonu: lambda, map, filter
Dobře, tohle mě zajímá: Jakou alternativu nabízí Python k foldl (které si přejmenoval na reduce)? U map je to jasné, přeci jen list comprehension ani generator expression nejsou o moc horší, navíc generator expression má lazy sémantiku, což je Good Thing(TN). Ale u toho reduce() trošku tápu. Taky jsem tápal, ale GvR mi to objasnil na zmíněné stránce: http://www.artima.com/weblogs/viewpost.jsp?thread=98196 So now reduce(). This is actually the one I've always hated most, because, apart from a few examples involving + or *, almost every time I see a reduce() call with a non-trivial function argument, I need to grab pen and paper to diagram what's actually being fed into that function before I understand what the reduce() is supposed to do. Zrušením reduce() GvR chrání americké lesy. Jan Matějka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Buducnost Pythonu: lambda, map, filter
So now reduce(). This is actually the one I've always hated most, because, apart from a few examples involving + or *, almost every time I see a reduce() call with a non-trivial function argument, I need to grab pen and paper to diagram what's actually being fed into that function before I understand what the reduce() is supposed to do. Zrušením reduce() GvR chrání americké lesy. Myslím, že by se uplatnil v politice a jako právník. Taktéž bych rád prozkoumal zákulisní spojení mezi organizací greenpeace a GvR. :-) Miloslav Ponkrác ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Buducnost Pythonu: lambda, map, filter
Tiez som cital, co napisal Guido v tom clanku All Things Pythonic The fate of reduce() in Python 3000 http://www.artima.com/weblogs/viewpost.jsp?thread=98196 Ale rozumel som z toho akurat ...blabla...reduce()...blabla..., teda ziadne dovody. Aj ked reduce pouzivam len v spojeni s glob(), prave preto, ze toto pouzitie uvadzaju v kapitole 9 knihy http://www.grada.cz/katalog/kniha/naucte-se-python/ (pozri priklad dole) povazoval som pouzite reduce() za pytonicke. Naopak Guido sa teraz snazi v tom horeuvedenom clanku s nadpisom 'All Things Pythonic' povedat asi to, ze reduce() nie je pytonicky. Kazdopadne si myslim. ze reduce() ma opodstatnenie, kto tomu rozumie, moze robit veci elegantnejsie. Tu je par jednoduchych prikladov na reduce(): --- reduce.py --- # reduce(function, list [, init_val]) # aplikuje fukciu 2 argumentov na prvky zoznamu zlava do prava, # t.j. tak, aby sa zoznam zredukoval na jednu hodnotu. # S init_val mozno zadat inicializacnu hodnotu # Napriklad: # reduce(lambda x,y:x+y,range(1,6),5) # vypocita 5+(1+2)+3)+4)+5))=20. # priklady: # suma 1,..,n suma1=lambda n: reduce(lambda x,y: x+y, range(n+1)) print suma(%d)=%d %(5, suma1(5)) # suma zoznamu suma2=lambda l: reduce(lambda x,y: x+y, l) l = range(6) print suma(%s)=%d % (l, suma2(l)) # faktorial faktorial=lambda n: reduce(lambda x,y: x*y, range(2, n+1), 1) print faktorial(%d)=%d % (0, faktorial(0)) print faktorial(%d)=%d % (5, faktorial(5)) # Globbing - rozvinut wildcards ?, * v cestach k suborom import sys, operator, glob arguments = sys.argv[1:] # ak su zadane nejake command-line argumenty (napr. editor.py oop1*.* *.py~) if arguments: # pouzitie reduce() filez = reduce(lambda x,y: x+y, map(glob.glob, arguments)) print filez # bez pouzitia reduce() filez=[] for arg in arguments: arg_list=glob.glob(arg) filez += arg_list print filez --- koniec --- Myslim, ze reduce() nebude nahradeny nijakou inou alternativou. Jednoducho to co reduce() robil za teba, budes musiet naprogramovat. Jakub Hegenbart [EMAIL PROTECTED] Sent by: [EMAIL PROTECTED] 13.11.2006 15:34 Please respond to Konference PyCZ python@py.cz To Konference PyCZ python@py.cz cc Subject Re: [python] Buducnost Pythonu: lambda, map, filter Petr Prikryl wrote: Jde o to, že Python může k reduce a lambda nabídnout alternativy, které nelze srovnávat s primitivností podmíněného skoku. Ty alternativy mi připadají lepší než reduce/lambda. Dobře, tohle mě zajímá: Jakou alternativu nabízí Python k foldl (které si přejmenoval na ?reduce?)? U map je to jasné, přeci jen list comprehension ani generator expression nejsou o moc horší, navíc generator expression má lazy sémantiku, což je Good Thing(TN). Ale u toho reduce() trošku tápu. Jakub Hegenbart ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python Mgr. Ing. Roman MIKLÓŠ Prvá stavebná sporiteľňa a.s. Bajkalská 30, P. O. Box 48 829 48 Bratislava 25 Tel.: +421/ 2 / 582 31 174 Fax: +421/ 2 / 582 31 109 ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Buducnost Pythonu: lambda, map, filter
Guido najprv vsetko co sa dalo prebral z inych jazykov (Perl,...) a musim povedat, ze sa mu to podarilo dobre sklbit dokopy. Ale teraz nastal obrat v jeho mysleni a chce zase robit v Pythone taketo cistky, to sa mi nepaci. Radsej by som naopak uvital keby sa preberalo stale viac, napriklad keby bolo mozne namiesto f = open(data.txt) line = f.readline() while line: print line line = f.readline() f.close() napisat jednoducho ako v Perle a C++ f = open(data.txt) while line = f.readline(): print line f.close() a keby praca s regularnymi vyrazmi bola taka flexibilna ako v Perle cez operator =~ napr. line = A1A 1A1 BBBCCC line =~ s/(\S{3})\s*/$1 /g # vysledok: ine = A1A 1A1 BBB CCC alebo if riadok =~ /(\d{6}\/\d{3,4})/ : print riadok obsahuje rodne cislo Vtedy by som Guida chvalil :-))) superman [EMAIL PROTECTED] Sent by: [EMAIL PROTECTED] 13.11.2006 18:24 Please respond to Konference PyCZ python@py.cz To Konference PyCZ python@py.cz cc Subject Re: [python] Buducnost Pythonu: lambda, map, filter Naopak Guido sa teraz snazi v tom horeuvedenom clanku s nadpisom 'All Things Pythonic' povedat asi to, ze reduce() nie je pytonicky. To je jako boj za čistou rasu. Navrhuji zastřelit GvR, než bude ještě více despotický ve svým rozhodnutích. Protože já jeho argumenty začínám považovat ... za trochu subjektivní. Podmíněné přiřazení není v Pythonu, protože to příliš připomíná C. Přiřazení není výrazem, protože to připomíná C (i když s tímto možná i trochu souhlasím). Funkctionální věci příliš připomínají Lisp, nebo Scheme. Já bych navrhnul, aby GvR dostal doživotní soudní zákaz s ostrahou učit se další programovací jazyky, jinak z Pythona zmizí úplně vše. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python Mgr. Ing. Roman MIKLÓŠ Prvá stavebná sporiteľňa a.s. Bajkalská 30, P. O. Box 48 829 48 Bratislava 25 Tel.: +421/ 2 / 582 31 174 Fax: +421/ 2 / 582 31 109 ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Buducnost Pythonu: lambda, map, filter
Radsej by som naopak uvital keby sa preberalo stale viac, napriklad keby bolo mozne namiesto f = open(data.txt) line = f.readline() while line: print line line = f.readline() f.close() napisat jednoducho ako v Perle a C++ f = open(data.txt) while line = f.readline(): print line f.close() To bych taky uvítal, kdyby přiřazení bylo výrazem. Jak to jednou člověk pozná, nemůže se bez toho obejít. a keby praca s regularnymi vyrazmi bola taka flexibilna ako v Perle cez operator =~ napr. line = A1A 1A1 BBBCCC line =~ s/(\S{3})\s*/$1 /g # vysledok: ine = A1A 1A1 BBB CCC alebo if riadok =~ /(\d{6}\/\d{3,4})/ : print riadok obsahuje rodne cislo Zase bych to s Perlem nepřeháněl. Když napíšete: if re.match('...',riadok): print riadok obsahuje rodne cislo Nezmnožoval bych to co není nutné. Ale hlavně bych se dnes už držel zpětné kompatibility a hlavně už bych neopisoval nic z Perlu. Perl není IMHO dobře navržený jazyk. Docela bych věřil že GvR převzal z Perlu i tu pitomost, že Larry připravuje Perl 6 nekompatibilní s předhcozími verzemi. Jenže tady se zapomíná, že Perl je a vždycky zůstane malým skriptovacím jazykem a sotva kdy se v tom napíše něco většího (výjimky potvrzující pravidlo pomiňme), protože zkrátka udržoval větší projekt v Perlu není jednoduché. Upřímně řečeno, kdybych v době kdy jsem se začal zajímat o Python věděl, že se připravuje další zpětně nekompatibilní verze Pythona, do učení Pythonu bych se nepustil a učil bych se něco jiného. Bohužel Python je tak dobrý jazyk, že se mi od něj nechce odcházet. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Buducnost Pythonu: lambda, map, filter
Roman Miklos napsal(a): Radsej by som naopak uvital keby sa preberalo stale viac, napriklad keby bolo mozne namiesto f = open(data.txt) line = f.readline() while line: print line line = f.readline() f.close() napisat jednoducho ako v Perle a C++ f = open(data.txt) while line = f.readline(): print line f.close() Já raději píšu f = open(data.txt) for line in f: print line f.close() pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] vzor Observer a predavani metody v parametru
Zdravim, pri implementaci vzoru observer jsem narazil na problem s predavanim metody vychozi tridy vsech pozorovatelu. Subjekt je trida sledovaneho objektu, Observer vzorova trida pro pozorovatele a ConcreteObserver priklad pozorovatele. Zadrhel je v tride myList, ktera udrzuje seznam pozorovatelu a definuje funkci call, ktera pro kazdou polozku zavola predanou funkci (Observer.update). Pri volani predane funkce s objektem jako parametr (namisto self) se samozrejme vola funkce Observer.update namisto ConcreteObserver.update i kdyz self ukazuje na instanci ConcreteObserver. class myList: def call(self, function, subject): for item in self.list: function(item, subject); class Subjekt: def __init__(self): self.observers = myList def updateAll(self): self.myList.call(Observer.update, self) class Observer: def update(self, subjekt): print virtual Observer method called class ConcreteObserver(Observer): def update(self, subjekt): print change something Neprilis elegantni reseni je v metode Observer.update volat self.update_real() class Observer: def update(self, subjekt): self.update_real(subjekt) class ConcreteObserver(Observer): def update_real(self, subjekt): print change something Pravdepodobne je to dusledek toho, ze se v pythonu i trida chova jako objekt. Neni nejake lepsi reseni, aniz bych zasahoval do tridy myList? Diky, Ondrej Penicka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] OT: Pridat nebo odebrat? (bylo Buducnost Pythonu: lambda, map, filter)
superman [...] pepr Kdo to řekl... Dokonalé to není tehdy, když už tam nejde nic přidat. Dokonalé je to tehdy, když už nejde nic odebrat. Proto se také vyhýbám dokonalým jazykům jako je Lisp. Až opravdu budu chtít minimalistický jazyk, tak nic lepšího, než Lisp neseženete. Tam opravdu nic neodeberete a je to velmi kompaktní a logický jazyk. Tedy logicky, lidi, které uspokojí tahle teorie o tom, že nemá jít nic odebrat už dávno propagují Lisp a Scheme. Tyhle lidi Python fakt neuspokojí. Když se kdysi někdo se Stroustrupem dohadoval o přednostech Smalltalku, ten mu na to odpověděl: OK. Jestli chcete používat Smalltalk, používejte Smalltalk: Smalltalk je nejlepší Smalltalk, který tady je. Mimochodem tahle teorie o odebírání zcela zanedbává jednu oblast lidského konání - a to krásu, estetiku, umění a design. Předpokládám, že i Váš domov není zařízen podle hesla, že bude dokonalý až z něho nelze nic odebrat, neboť holobyt asi není Váš ideál. A analogicky si totéž myslím o programovacím jazyku. Já to tušil, Miloslave. Píšeš rychleji, než čteš a čteš rychleji, než myslíš. Že ty sis nedočetl ty tečky až do konce. A ne. Nepřidám si do obýváku další křeslo a vázy. :- ROTFL pepr P.S. nic ve zlém... ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] vzor Observer a predavani metody v parametru
Na téhle stránce jsem narazil na ukázku z původní publikace Design Patterns http://www.research.ibm.com/designpatterns/example.htm A řešení najdeš na http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/131499 včetně demonstračního příkladu. Podle mého názoru je zbytečné zavádět class myList a metodu call. Observer pattern definuje rozhraní zúčastněných tříd, což znamená, že některé metody mají dohodnuté jméno a význam. Do seznamu pozorovatelů je zbytečné přidávat odkaz na metodu, když tam může být uložen přímo odkaz na objekt. Ondrej Penicka pri implementaci vzoru observer jsem narazil na problem s predavanim metody vychozi tridy vsech pozorovatelu. Subjekt je trida sledovaneho objektu, Observer vzorova trida pro pozorovatele a ConcreteObserver priklad pozorovatele. Zadrhel je v tride myList, ktera udrzuje seznam pozorovatelu a definuje funkci call, ktera pro kazdou polozku zavola predanou funkci (Observer.update). Pri volani predane funkce s objektem jako parametr (namisto self) se samozrejme vola funkce Observer.update namisto ConcreteObserver.update i kdyz self ukazuje na instanci ConcreteObserver. class myList: def call(self, function, subject): for item in self.list: function(item, subject); class Subjekt: def __init__(self): self.observers = myList def updateAll(self): self.myList.call(Observer.update, self) class Observer: def update(self, subjekt): print virtual Observer method called class ConcreteObserver(Observer): def update(self, subjekt): print change something Neprilis elegantni reseni je v metode Observer.update volat self.update_real() class Observer: def update(self, subjekt): self.update_real(subjekt) class ConcreteObserver(Observer): def update_real(self, subjekt): print change something Pravdepodobne je to dusledek toho, ze se v pythonu i trida chova jako objekt. Neni nejake lepsi reseni, aniz bych zasahoval do tridy myList? pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python