[Tutor PyCZ] print bez uvodni mezery

Petr Prikryl PrikrylP na skil.cz
Úterý Listopad 22 10:57:31 CET 2005



Jaroslav Vysoky...
[...]
> Existuje způsob, jak přinutit PRINT, aby nevkládal před tištěný objekt
> (není-li na začátku řádku) úvodní mezeru? Pochopitelně to můžu obejít
> naskládáním výstupu do řetězce, ale je mi divný, že by to nešlo...

print je tak udělaný proto, protože většinou
se takové chování hodí. Mezeru vkládá jakoby
čárka pro oddělování parametrů příkazu print.
Místo čárky můžu použít plus '+' a pak se 
parametry zřetězí. Pokud to ovšem nejsou řetězce, 
musím je přes str() na řetězce převést:

>>> print 'a', 'b', 'c', 123
a b c 123
>>> print 'a' + 'b' + 'c' + str(123)
abc123

Pokud by bylo řetězených hodnot moc, 
bývá lepší si je předem naskládat
do seznamu a ten pak najednou zřetězit.
V takovém případě se zase musím postarat
o to, aby řetězené části byly řetězce:

>>> L = ['a', 'b', 'c', 123]
>>> L
['a', 'b', 'c', 123]
>>> print ' '.join(L)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: sequence item 3: expected string, int found


Parametrem metody join() zabudovaného
řetězcového typu je oddělovací řetězec.
Příklad:

>>> L = ['a', 'b', 'c', str(123)]
>>> L
['a', 'b', 'c', '123']
>>> print '|'.join(L)
a|b|c|123
>>> print ''.join(L)
abc123

Pokud potřebuji vypisovat text postupně
(například v cyklu]), pak nemůžu použít
příkaz print, který mi tam vždycky
přidá alespoň mezeru nebo konec řádku.
V takovém případě musím použít klasický
výpis do souboru, v tomto případě na
sys.stdout:

import sys
sys.stdout.write('a')
sys.stdout.write('b')
sys.stdout.write('c')
sys.stdout.write(str(123))

Výsledkem bude 'abc123'.

pepr


Další informace o konferenci Tutor