Вопрос-Ответ

How to print without a newline or space

Как печатать без перевода строки или пробела

Рассмотрим эти примеры с использованием print в Python:

>>> for i in range(4): print('.')
.
.
.
.
>>> print('.', '.', '.', '.')
. . . .

Между каждым значением добавляется либо перевод строки, либо пробел. Как я могу этого избежать, чтобы вместо этого выводился....? Другими словами, как я могу "добавить" строки в стандартный поток вывода?

Переведено автоматически
Ответ 1

В Python 3 вы можете использовать sep= и end= параметры print функции:

Чтобы не добавлять перевод строки в конец строки:

print('.', end='')

Чтобы не добавлять пробел между всеми аргументами функции, которые вы хотите напечатать:

print('a', 'b', 'c', sep='')

Вы можете передать любую строку в любой параметр, и вы можете использовать оба параметра одновременно.

Если у вас возникли проблемы с буферизацией, вы можете очистить вывод, добавив flush=True аргумент ключевого слова:

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

Python 2.6 и 2.7

Из Python 2.6 вы можете либо импортировать print функцию из Python 3, используя __future__ модуль:

from __future__ import print_function

который позволяет использовать решение Python 3, описанное выше.

Однако обратите внимание, что flush ключевое слово недоступно в версии print функции, импортированной из __future__, в Python 2; оно работает только в Python 3, более конкретно 3.3 и более поздних версиях. В более ранних версиях вам все равно придется выполнять сброс вручную с помощью вызова sys.stdout.flush(). Вам также придется переписать все другие инструкции печати в файле, из которого вы выполняете этот импорт.

Или вы можете использовать sys.stdout.write()

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

Вам также может потребоваться вызвать

sys.stdout.flush()

чтобы убедиться, что stdout выполняется немедленная очистка.

Ответ 2

Для Python 2 и более ранних версий это должно быть так же просто, как описано в Re: Как печатать без CR? автор Гвидо ван Россум (перефразировано):


Возможно ли что-то напечатать, но не добавлять к этому автоматически возврат каретки?


Да, добавьте запятую после последнего аргумента для печати. Например, этот цикл выводит числа 0 .. 9 в строке, разделенной пробелами. Обратите внимание на параметр "print" без параметров, который добавляет последнюю строку перевода:

>>> for i in range(10):
... print i,
... else:
... print
...
0 1 2 3 4 5 6 7 8 9
>>>
Ответ 3

Примечание: Раньше заголовок этого вопроса был чем-то вроде "Как printf в Python"

Поскольку люди могут приходить сюда в поисках этого по названию, Python также поддерживает замену в стиле printf:

>>> 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

Кроме того, вы можете легко умножать строковые значения:

>>> print "." * 10
..........
Ответ 4

Используйте функцию печати в стиле Python 3 для Python 2.6+ (это также нарушит работу любых существующих операторов печати с ключевыми словами в том же файле).

# For Python 2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
print('.', end='')

Чтобы не испортить все ключевые слова для печати на Python 2, создайте отдельный printf.py файл:

# printf.py

from __future__ import print_function

def printf(str, *args):
print(str % args, end='')

Затем используйте это в своем файле:

from printf import printf
for x in xrange(10):
printf('.')
print 'done'
#..........done

Другие примеры, показывающие стиль printf:

printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
python