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 <mc...@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: mc...@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@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz >
_______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz