<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-2" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Bohumil Douša napsal(a):
<blockquote cite="mid44984E92.8010205@centrum.cz" type="cite">
<meta content="text/html;charset=ISO-8859-2" http-equiv="Content-Type">
<title></title>
<font face="Helvetica, Arial, sans-serif">Tak jsem odpověď dostal na
stránkách <a class="moz-txt-link-abbreviated" href="http://www.py.cz:">www.py.cz:</a><br>
<br>
<font color="#ff6600">"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."</font></font><br>
<br>
</blockquote>
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ů...<br>
<br>
<tt>import timeit<br>
<br>
a=""" <br>
s = ""<br>
for i in range(1000000):<br>
s = s + "a"<br>
"""<br>
<br>
b="""<br>
z = []<br>
for i in range(1000000):<br>
z.append("a")<br>
''.join(z)<br>
"""<br>
<br>
x=timeit.Timer(a)<br>
print x.timeit(1)<br>
<br>
x=timeit.Timer(b)<br>
print x.timeit(1)</tt><br>
<br>
Výsledek:<br>
<tt>0.835770188669<br>
0.742270595844<br>
>>><br>
<br>
U 10-ti milionu opakování je již situace jiná, tam dostávám:<br>
56.6808538515<br>
8.99465686281<br>
>>><br>
<br>
</tt><br>
<blockquote cite="mid44984E92.8010205@centrum.cz" type="cite">Bohumil
Douša napsal(a):
<blockquote cite="mid44984CF4.1010508@centrum.cz" type="cite">
<meta content="text/html;charset=ISO-8859-2"
http-equiv="Content-Type">
<title></title>
<font face="Helvetica, Arial, sans-serif">Dobrý den,<br>
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".<br>
Jako příklad použití "+" je uvedeno(toto prý vytvoří dva objekty):<br>
x = "ahoj " + "svete"<br>
<br>
</font></blockquote>
</blockquote>
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ů.<br>
<br>
<br>
<br>
<pre class="moz-signature" cols="100">--
geon
Pavel Kosina
</pre>
</body>
</html>