[Tutor PyCZ] zřetězení stringů

Petr Prikryl PrikrylP na skil.cz
Středa Červen 21 10:17:45 CEST 2006


B. Douša
> 
> 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"
> 
> Mohl bych poprosit o nastínění toho, že "+" vytváří nový
> objekt - jak mám toto chápat?

Immutable znamená něco jako později neměnný. A to je právě
vlastnost objektů zabudovaného typu string. 

Doporučuji pokud možno zapomenout na *modul* string. Pochází
z doby, kdy neexistoval zabudovaný typ string. Pořád sice
funguje, ale je v něm jen pár věcí, které zabudovaný typ
nemá -- většinou se dají snadno napsat.

Místo funkce string.join() se dá stejným způsobem používat
metoda join() zabudovaného řetězce. Ten řetězec uvádí co se
má mezi spojené řetězce vložit, parametrem je sekvence
(seznam, tuple) nebo cokoliv, přes co se dá postupně
procházet.

Takže pokud například načítám velké množství řádků souboru,
je lepší uvažovat o nich jako o samostatných řádcích a
načíst je do seznamu řádků místo do jednoho řetězce. Místo
kódu...

f = file('a.txt')
s = f.read()
f.close()

doporučuji (když už potřebuji obsah celého souboru najednou)


f = file('a.txt')
seznam = f.readlines()
f.close()

Z načteného seznamu pak totožný obsah, jako v s dostanu
takto

Uložit do souboru a.py
=======================================================
s = ''.join(seznam)

radkyJakoJedenRetezec = """\
Prvni radek.
Druhy radek.
Treti radek.
"""

f = file('a.txt', 'w')
f.write(radkyJakoJedenRetezec)
f.close()

f = file('a.txt')
s = f.read()
f.close()

print '-' * 60
print s

f = file('a.txt')
seznam = f.readlines()
f.close()

s = ''.join(seznam)

print '-' * 60
print s

print '-' * 60
print repr(seznam)
print '-' * 60
=======================================================

Po spuštění to bude vypadat nějak takto:

C:\tmp>python a.py
------------------------------------------------------------
Prvni radek.
Druhy radek.
Treti radek.

------------------------------------------------------------
Prvni radek.
Druhy radek.
Treti radek.

------------------------------------------------------------
['Prvni radek.\n', 'Druhy radek.\n', 'Treti radek.\n']
------------------------------------------------------------

pepr


Další informace o konferenci Tutor