<!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>
&gt;&gt;&gt;<br>
<br>
U 10-ti milionu opakování je již situace jiná, tam dostávám:<br>
56.6808538515<br>
8.99465686281<br>
&gt;&gt;&gt;<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>