> v tom případě by mělo fungovat i > >>> a=i*i for i in range(3) > jinak je to chaos
Nenazyva sa to "chaos" ale "syntactic sugar" :-) Na druhej strane, ak by fungovalo toto a=i*i for i in range(3) tak to by si mohol zas niekto vysvetlovat, ze to je to iste ako toto >>> for i in range(3): ... a=i*i kde a je vlastne premenna do ktorej sa priradi i*i. V skutocnosti ma premenna ale ukazovat na objekt typu generator >>> a <generator object at 0x00DFEF30> Dalej ale, ak sa da namiesto >>> sum((i*i for i in range(3))) 5 zjednodusene napisat aj toto >>> sum(i*i for i in range(3)) 5 tak clovek by ocakaval, ze aj namiesto >>> sum((1, 2, 3)) 6 sa bude dat zjednodusene napisat iba toto >>> sum(1, 2, 3) Traceback (most recent call last): File "<interactive input>", line 1, in <module> TypeError: sum expected at most 2 arguments, got 3 Ako vidiet, toto ale nefunguje. From: David Rohleder <da...@ics.muni.cz> To: Konference PyCZ <python@py.cz> Date: 05.03.2010 12:45 Subject: Re: [python] dokumentace k novejsim rysum jazyka Sent by: python-boun...@py.cz rmik...@pss.sk píše v Pá 05. 03. 2010 v 10:31 +0100: > >problém je v tomto: > > > >sum je standardní funkce: > > > >>>> sum(i**i for i in range(10)) > > > >tady mně to prostě uniká - když závorky patří funkci sum, tak vnitřek > by > >měl být uzavřený do závorek taky. > > funguje to takto > >>> sum(i*i for i in range(3)) > 5 > alebo aj takto ked je vnutrajsok funkcie sum() uzavrety do zatvoriek: > >>> sum((i*i for i in range(3))) > 5 > v tom případě by mělo fungovat i >>> a=i*i for i in range(3) jinak je to chaos > > > > > From: David Rohleder <da...@ics.muni.cz> > To: Konference PyCZ <python@py.cz> > Date: 05.03.2010 08:00 > Subject: Re: [python] dokumentace k novejsim rysum jazyka > Sent by: python-boun...@py.cz > > ______________________________________________________________________ > > > > Jirka Vejrazka píše v Pá 05. 03. 2010 v 01:01 +0100: > > > čili se to chová jinak než standardní tuple, je to spíš něco, čemu > se říká generátor. > > > > Nojo, vida - to jsem nevedel, ze s kulatymi zavorkami to vytvori > > generator, diky :) > > > > Generator ma tu vyhodu, ze se nic nevytvari v pameti. Zrejme je to, > > kdyz se pouzije misto range (ktery interne dela list) funkce xrange > > (coz je taky generator) - tohle plati pro Python 2.4 ktery ted mam > > spusteny, v novejsich uz je to mozna jinak) > > > > >>> a = [x for x in xrange(100000000)] # vytvori v pameti list, > ktery ma 100 milionu prvku (bude chvili trvat) > > >>> a = (x for x in xrange(100000000)] # bleskove vytvori > generator, ktery po zavolani a.next() najde a vrati "dalsi prvek v > poradi" > > > > >>>> b=(1,2,3) > > >>>> b.next() > > > Traceback (most recent call last): > > > File "<stdin>", line 1, in <module> > > > AttributeError: 'tuple' object has no attribute 'next' > > > > Tohle uz je logicke, to je normalni tuple. > > > > > Mně se takové věci celkem líbí, ale připadne mně to nějak > nedomyšlené, > > > protože by celý ten generátor měl tvořit samostatnou syntaktickou > > > jednotku, tj. interpret by měl nějak sežrat zápis > > > > > >>>> i*i for i in range(10) > > > > Proc, tady nejsou okolo zavorky, je to syntakticky neco uplne > jineho... > > > > problém je v tomto: > > sum je standardní funkce: > > >>> sum(i**i for i in range(10)) > > tady mně to prostě uniká - když závorky patří funkci sum, tak vnitřek > by > měl být uzavřený do závorek taky. > > D. > > _______________________________________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > _______________________________________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
_______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python