[python] Rekurzivní generátor v Pythonu 3?
Petr Messner
petr.messner na gmail.com
Úterý Srpen 30 12:28:30 CEST 2016
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
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20160830/1620cd9a/attachment.html>
Další informace o konferenci Python