[python] Rekurzivní generátor v Pythonu 3?
Ondrej Tuma
konference na webjet.cz
Úterý Srpen 30 16:09:29 CEST 2016
Zdravím vespolek,
kolega toto téma řešil tak před třemi lety a došel k závěru že je to
jedno. Resp. v každé verzi to bylo jinak. Pravda vstupovali do toho
i verze 2.x. Asi taky záleží jak moc jsou ty texty konstantní,
resp. jako moc jsou dynamické, v jakém kompilátoru s jakými přepínači je
pythoní interpretr kompilovaný a ad absurdum na jakém HW to běží.
Ondra
V Tue, 30 Aug 2016 12:28:30 +0200
Petr Messner <petr.messner na gmail.com> napsáno:
> To je veselé, když někdo dělá benchmark profilerem.
>
> $ cat test_plus.py
> out = ''
> for i in range(10000000):
> out += 'Nebudu komentovat rychlost algoritmů bez měření'
> $ cat test_append.py
> out = []
> for i in range(10000000):
> out.append('Nebudu komentovat rychlost algoritmů bez měření')
> outstr = ''.join(out)
> $ time python3 test_plus.py
>
> real 0m2.835s
> user 0m2.536s
> sys 0m0.288s
> $ time python3 test_append.py
>
> real 0m1.848s
> user 0m1.588s
> sys 0m0.256s
>
>
>
> Dne 30. srpna 2016 11:39 Matěj Cepl <mcepl na cepl.eu> napsal(a):
>
> > On 2016-08-28, 10:54 GMT, Petr Messner wrote:
> > > Na tohle se vykašli. Jakmile dokument nemá stromovou
> > > strukturu, tak je vše tisíckrát složitější. Dikybohu toto XML
> > > neumí.
> >
> > Tohle je rada s odpuštěním na h... Ten vstupní datový formát mám
> > daný, s tím nemůžu nic dělat.
> >
> > > nedělej skládání řetězců stylem txt += part, je to strašně
> > > pomalé (O(n^2) místo O(n)).. Z txt si udělej list a používej
> > > append: txt.append(part) a na konci "".join(txt).
> >
> > To je veselé jak tyhle pověry drží. Tohle bylo opraveno
> > v pythonu 2.5 (pokud se nemýlím).
> >
> > ~$ cat test_plus.py
> > out = ''
> > for i in range(10000000):
> > out += 'Nebudu komentovat rychlost algoritmů bez měření'
> > ~$ python3 -mcProfile test_plus.py
> > 3 function calls in 1.970 seconds
> >
> > Ordered by: standard name
> >
> > ncalls tottime percall cumtime percall
> > filename:lineno(function) 1 1.970 1.970 1.970 1.970
> > test_plus.py:1(<module>) 1 0.000 0.000 1.970 1.970
> > {built-in method exec} 1 0.000 0.000 0.000 0.000
> > {method 'disable' of '_lsprof.Profiler' objects}
> >
> >
> > ~$ cat test_append.py
> > out = []
> > for i in range(10000000):
> > out.append('Nebudu komentovat rychlost algoritmů bez
> > měření') outstr = ''.join(out)
> > ~$ python3 -mcProfile test_append.py
> > 10000004 function calls in 3.331 seconds
> >
> > Ordered by: standard name
> >
> > ncalls tottime percall cumtime percall
> > filename:lineno(function) 1 1.845 1.845 3.331 3.331
> > test_append.py:1(<module>)
> > 1 0.000 0.000 3.331 3.331 {built-in method
> > exec} 10000000 0.528 0.000 0.528 0.000 {method 'append'
> > of 'list' objects}
> > 1 0.000 0.000 0.000 0.000 {method 'disable'
> > of '_lsprof.Profiler' objects}
> > 1 0.959 0.959 0.959 0.959 {method 'join' of
> > 'str' objects}
> >
> > ~$
> >
> > Hezký den,
> >
> > Matěj
> >
> > --
> > https://matej.ceplovi.cz/blog/, Jabber: mcepl na ceplovi.cz
> > GPG Finger: 3C76 A027 CA45 AD70 98B5 BC1D 7920 5802 880B C9D8
> >
> > You either die a hero or you live long enough to see yourself
> > become the villain.
> > -- Harvey Dent in The Dark Knight
> > _______________________________________________
> > Python mailing list
> > python na py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
> > Visit: http://www.py.cz
> >
--
Ondřej Tůma <mcbig na zeropage.cz>
www: http://ipv6.mcbig.cz jabber: mcbig na jabber.cz twitter: mcbig_cz
------------- další část ---------------
A non-text attachment was scrubbed...
Name: [žádný popis není k dispozici]
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://www.py.cz/pipermail/python/attachments/20160830/462c3443/attachment.asc>
Další informace o konferenci Python