<div dir="ltr"><div>To je veselé, když někdo dělá benchmark profilerem.</div><div><br></div><div><div>$ cat test_plus.py </div><div>out = ''</div><div>for i in range(10000000):</div><div> out += 'Nebudu komentovat rychlost algoritmů bez měření'</div><div>$ cat test_append.py </div><div>out = []</div><div>for i in range(10000000):</div><div> out.append('Nebudu komentovat rychlost algoritmů bez měření')</div><div>outstr = ''.join(out)</div><div>$ time python3 test_plus.py </div><div><br></div><div>real<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>0m2.835s</div><div>user<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>0m2.536s</div><div>sys<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>0m0.288s</div><div>$ time python3 test_append.py </div><div><br></div><div>real<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>0m1.848s</div><div>user<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>0m1.588s</div><div>sys<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>0m0.256s</div></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">Dne 30. srpna 2016 11:39 Matěj Cepl <span dir="ltr"><<a href="mailto:mcepl@cepl.eu" target="_blank">mcepl@cepl.eu</a>></span> napsal(a):<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 2016-08-28, 10:54 GMT, Petr Messner wrote:<br>
> Na tohle se vykašli. Jakmile dokument nemá stromovou<br>
> strukturu, tak je vše tisíckrát složitější. Dikybohu toto XML<br>
> neumí.<br>
<br>
</span>Tohle je rada s odpuštěním na h... Ten vstupní datový formát mám<br>
daný, s tím nemůžu nic dělat.<br>
<span class=""><br>
> nedělej skládání řetězců stylem txt += part, je to strašně<br>
> pomalé (O(n^2) místo O(n)).. Z txt si udělej list a používej<br>
> append: txt.append(part) a na konci "".join(txt).<br>
<br>
</span>To je veselé jak tyhle pověry drží. Tohle bylo opraveno<br>
v pythonu 2.5 (pokud se nemýlím).<br>
<br>
~$ cat test_plus.py<br>
out = ''<br>
for i in range(10000000):<br>
out += 'Nebudu komentovat rychlost algoritmů bez měření'<br>
~$ python3 -mcProfile test_plus.py<br>
3 function calls in 1.970 seconds<br>
<br>
Ordered by: standard name<br>
<br>
ncalls tottime percall cumtime percall filename:lineno(function)<br>
1 1.970 1.970 1.970 1.970 test_plus.py:1(<module>)<br>
1 0.000 0.000 1.970 1.970 {built-in method exec}<br>
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}<br>
<br>
<br>
~$ cat test_append.py<br>
out = []<br>
for i in range(10000000):<br>
out.append('Nebudu komentovat rychlost algoritmů bez měření')<br>
outstr = ''.join(out)<br>
~$ python3 -mcProfile test_append.py<br>
10000004 function calls in 3.331 seconds<br>
<br>
Ordered by: standard name<br>
<br>
ncalls tottime percall cumtime percall filename:lineno(function)<br>
1 1.845 1.845 3.331 3.331 test_append.py:1(<module>)<br>
1 0.000 0.000 3.331 3.331 {built-in method exec}<br>
10000000 0.528 0.000 0.528 0.000 {method 'append' of 'list' objects}<br>
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}<br>
1 0.959 0.959 0.959 0.959 {method 'join' of 'str' objects}<br>
<br>
~$<br>
<br>
Hezký den,<br>
<span class=""><br>
Matěj<br>
<br>
--<br>
<a href="https://matej.ceplovi.cz/blog/" rel="noreferrer" target="_blank">https://matej.ceplovi.cz/blog/</a><wbr>, Jabber: <a href="mailto:mcepl@ceplovi.cz">mcepl@ceplovi.cz</a><br>
GPG Finger: 3C76 A027 CA45 AD70 98B5 BC1D 7920 5802 880B C9D8<br>
<br>
</span>You either die a hero or you live long enough to see yourself become the villain.<br>
-- Harvey Dent in The Dark Knight<br>
<div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
Python mailing list<br>
<a href="mailto:python@py.cz">python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" rel="noreferrer" target="_blank">http://www.py.cz/mailman/<wbr>listinfo/python</a><br>
<br>
Visit: <a href="http://www.py.cz" rel="noreferrer" target="_blank">http://www.py.cz</a><br>
</div></div></blockquote></div><br></div>