Рассмотрим эти примеры с использованием print в Python:
>>> for i inrange(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(). Вам также придется переписать все другие инструкции печати в файле, из которого вы выполняете этот импорт.
Возможно ли что-то напечатать, но не добавлять к этому автоматически возврат каретки?
Да, добавьте запятую после последнего аргумента для печати. Например, этот цикл выводит числа 0 .. 9 в строке, разделенной пробелами. Обратите внимание на параметр "print" без параметров, который добавляет последнюю строку перевода:
>>> for i inrange(10): ... print i, ... else: ... print ... 0123456789 >>>
Ответ 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
defprintf(str, *args): print(str % args, end='')
Затем используйте это в своем файле:
from printf import printf for x in xrange(10): printf('.') print'done' #..........done