[python] Rekurzivní generátor v Pythonu 3?
Matěj Cepl
mcepl na cepl.eu
Pátek Březen 31 13:34:23 CEST 2017
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
Další informace o konferenci Python