Как печатать без перевода строки или пробела? - PullRequest
1649 голосов
/ 29 января 2009

Вопрос в заголовке.

Я бы хотел сделать это в . Что я хотел бы сделать в этом примере в :

#include <stdio.h>

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

Выход:

..........

В Python:

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

В Python print добавит \n или пробел, как мне этого избежать? Теперь это просто пример. Не говорите мне, что я могу сначала создать строку, а затем распечатать ее. Я хотел бы знать, как "добавить" строки в stdout.

Ответы [ 21 ]

2262 голосов
/ 30 января 2009

Общий способ

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

Возможно, вам также понадобится позвонить

sys.stdout.flush()

для немедленного сброса stdout.

Python 2.6 +

Из Python 2.6 вы можете импортировать функцию print из Python 3:

from __future__ import print_function

Это позволяет использовать приведенное ниже решение Python 3.

Python 3

В Python 3 оператор print был изменен на функцию. В Python 3 вы можете вместо этого сделать:

print('.', end='')

Это также работает в Python 2, при условии, что вы использовали from __future__ import print_function.

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

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

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

Источники

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/__future__.html
  3. https://docs.python.org/3/library/functions.html#print
289 голосов
/ 27 июля 2012

Это должно быть так просто, как описано по этой ссылке Гвидо Ван Россумом:

Re: Как печатать без к / р?

http://legacy.python.org/search/hypermail/python-1992/0115.html

Можно ли что-то напечатать, но автоматически не возврат каретки прилагается к нему?

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

>>> for i in range(10):
...     print i,
... else:
...     print
...
0 1 2 3 4 5 6 7 8 9
>>> 
164 голосов
/ 30 января 2009

Примечание: заголовок этого вопроса был что-то вроде "Как напечатать в 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
..........
90 голосов
/ 21 февраля 2011

Используйте функцию печати в стиле python3 для python2.6 + (также нарушит все существующие операторы печати с ключевыми словами в том же файле.)

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

Чтобы не испортить все ключевые слова печати python2, создайте отдельный 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
38 голосов
/ 03 декабря 2010

Это не ответ на вопрос в заголовке, а ответ о том, как печатать в одной строке:

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()
26 голосов
/ 30 января 2009

Новая (по состоянию на Python 3.0) функция print имеет необязательный параметр end, который позволяет изменять конечный символ. Также есть sep для разделителя.

19 голосов
/ 17 июня 2015

Использование functools.partial для создания новой функции с именем printf

>>> import functools

>>> printf = functools.partial(print, end="")

>>> printf("Hello world\n")
Hello world

Простой способ обернуть функцию с параметрами по умолчанию.

17 голосов
/ 10 июля 2014

Вы можете просто добавить , в конце функции print, чтобы она не печаталась на новой строке.

8 голосов
/ 23 ноября 2015

Вы можете попробовать:

import sys
import time
# Keeps the initial message in buffer.
sys.stdout.write("\rfoobar bar black sheep")
sys.stdout.flush()
# Wait 2 seconds
time.sleep(2)
# Replace the message with a new one.
sys.stdout.write("\r"+'hahahahaaa             ')
sys.stdout.flush()
# Finalize the new message by printing a return carriage.
sys.stdout.write('\n')
8 голосов
/ 10 июля 2016

В Python 3 печать - это функция. Когда вы звоните

print ('hello world')

Python переводит его на

print ('hello world', end = '\n')

Вы можете изменить конец на что угодно.

print ('hello world', end = '')
print ('hello world', end = ' ')
...