Hoe kan ik printen zonder newline of spatie?

De vraag zit in de titel.

Ik wil het graag doen in [tag:Python]. Wat ik in dit voorbeeld zou willen doen in [tag:C]:

In C:

#include <stdio.h>

int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

Uitvoer:

..........

In Python:

>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .

In Python zal print een spatie of spatie toevoegen, hoe kan ik dat voorkomen? Nu, het'is maar een voorbeeld. Vertel me niet dat ik eerst een string kan maken en die dan kan printen. Ik'zou graag willen weten hoe ik strings kan toevoegen aan stdout.

Oplossing

Algemene weg

import sys
sys.stdout.write('.')

Misschien moet u ook bellen naar

sys.stdout.flush()

om ervoor te zorgen dat stdout onmiddellijk wordt doorgespoeld.

Python 2.6+

Vanaf Python 2.6 kun je de print functie van Python 3 importeren:

from __future__ import print_function

Hierdoor kunt u de onderstaande Python 3 oplossing gebruiken.

Python 3

In Python 3, is het print statement veranderd in een functie. In Python 3, kunt u in plaats daarvan doen:

print('.', end='')

Dit werkt ook in Python 2, mits je from __future__ import print_function hebt gebruikt.

Als je problemen hebt met bufferen, kun je de uitvoer doorspoelen door flush=True keyword argument toe te voegen:

print('.', end='', flush=True)

Merk echter op dat het flush sleutelwoord niet beschikbaar is in de versie van de print functie geïmporteerd uit __future__ in Python 2; het werkt alleen in Python 3, meer specifiek 3.3 en later. In eerdere versies zult u nog steeds handmatig moeten spoelen met een oproep aan sys.stdout.flush().

Bronnen

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/-toekomst__.html
  3. https://docs.python.org/3/library/functions.html#print
Commentaren (5)

Note: De titel van deze vraag was eerst iets als "Hoe printf in python?"

Omdat mensen hier misschien komen zoeken op basis van de titel, ondersteunt Python ook printf-stijl substitutie:

>>> strings = [ "one", "two", "three" ]
>>>
>>> for i in xrange(3):
...     print "Item %d: %s" % (i, strings[i])
...
Item 0: one
Item 1: two
Item 2: three

En, je kunt gemakkelijk string-waarden vermenigvuldigen:

>>> print "." * 10
..........
Commentaren (7)

De nieuwe (vanaf Python 3.0) print functie heeft een optionele end parameter waarmee je het eindkarakter kunt aanpassen. Er is ook sep voor scheidingsteken.

Commentaren (1)