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.mess...@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 <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 > > -- Ondřej Tůma <mc...@zeropage.cz> www: http://ipv6.mcbig.cz jabber: mc...@jabber.cz twitter: mcbig_cz
pgpMsU4ScB0A8.pgp
Description: OpenPGP digital signature
_______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz