[Tutor PyCZ] zřetězení stringů
Pavel Kosina
geon na post.cz
Středa Červen 21 11:31:09 CEST 2006
Bohumil Douša napsal(a):
> Tak jsem odpověď dostal na stránkách www.py.cz:
>
> "Pythonovské řetězce jsou totiž neměnné (immutable, narozdíl od
> pascalovských). V každém cyklu se musí vytvořit nový řetězec (a starý
> se zahazuje). To může vést k neočekávanému poklesu rychlosti
> provádění. Spojování řetězců pomocí operátorů + nebo += je při
> provádění několika změn v pořádku, ale při použití v cyklu se to
> nedoporučuje."
>
toto pravděpodobně platilo v dřívějších verzích Pythona. Nyní to již
není pravda, alespoň pokud se cyklus opakuje méně než 1.000.000 x. Buď
lepší implementací nebo většími pamětmi u dnešních strojů...
import timeit
a="""
s = ""
for i in range(1000000):
s = s + "a"
"""
b="""
z = []
for i in range(1000000):
z.append("a")
''.join(z)
"""
x=timeit.Timer(a)
print x.timeit(1)
x=timeit.Timer(b)
print x.timeit(1)
Výsledek:
0.835770188669
0.742270595844
>>>
U 10-ti milionu opakování je již situace jiná, tam dostávám:
56.6808538515
8.99465686281
>>>
> Bohumil Douša napsal(a):
>> Dobrý den,
>> začínám s pythonem a právě jsem si v jedné knize přečetl, že se nemá
>> pro zřetězení používat znaménko "+", protože prý vytváří při každém
>> použití nový objekt a že je lépe použít funkci z modulu string
>> "string.join".
>> Jako příklad použití "+" je uvedeno(toto prý vytvoří dva objekty):
>> x = "ahoj " + "svete"
>>
tento způsob zápisu je pro začátečníka, pro čitelnost a srozumitelnost,
daleko vhodnější. Doporučuji zůstávat u tohoto, pokud se jedná prosté
slučování řetězců.
--
geon
Pavel Kosina
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/tutor/attachments/20060621/de29f5b1/attachment.htm
Další informace o konferenci Tutor