Ответы:
Есть несколько способов добиться своего результата. Если вам просто нужно решение для вашего случая, используйте умножение строк, как упоминает @Ant . Это будет работать, только если каждый из ваших print
операторов выводит одну и ту же строку. Обратите внимание, что он работает для умножения строк любой длины (например, 'foo' * 20
работает).
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Если вы хотите сделать это в целом, создайте строку и затем распечатайте ее один раз. Это займет немного памяти для строки, но сделает только один вызов print
. Обратите внимание, что объединение строк +=
теперь линейно зависит от размера объединяемой строки, поэтому это будет быстро.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Или вы можете сделать это напрямую, используя sys.stdout . write () , который print
является оболочкой. Будет записана только необработанная строка, которую вы ей даете, без какого-либо форматирования. Обратите внимание, что новая строка не печатается даже в конце 20 a
секунд.
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3 преобразует print
оператор в функцию print () , которая позволяет вам установить end
параметр. Вы можете использовать его в версии> = 2.6, импортировав из __future__
. Я бы избегал этого в любом серьезном коде 2.x, так как это будет немного сбивать с толку тех, кто никогда не использовал 3.x. Тем не менее, он должен дать вам представление о некоторых достоинствах, которые приносит 3.x.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)
Вместо этого используйте .
+=
в Python - это операция с постоянным временем для конкатенации одного символа.
Из PEP 3105: печать как функция в документе Что нового в Python 2.6 :
>>> from __future__ import print_function
>>> print('a', end='')
Очевидно, что это работает только с python 3.0 или выше (или 2.6+ с a from __future__ import print_function
в начале). Этот print
оператор был удален и стал print()
функцией по умолчанию в Python 3.0.
Вы можете подавить пробел, напечатав пустую строку в stdout между print
операторами.
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Однако более четкое решение - сначала построить всю строку, которую вы хотите распечатать, а затем вывести ее с помощью одного print
оператора.
sys.stdout.write()
в этом случае удобнее использовать только . Однако я хотел показать, что запись пустой строки в stdout подавляет пространство между элементами, записанными с использованием print
, что может быть полезно в аналогичных ситуациях.
Вы можете напечатать символ возврата ( '\b'
):
for i in xrange(20):
print '\ba',
результат:
aaaaaaaaaaaaaaaaaaaa
Если вы хотите, чтобы они появлялись по одному, вы можете сделать это:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush()
необходимо для принудительной записи символа при каждом запуске цикла.
Просто в качестве примечания:
Печать - это O (1), но построение строки и последующая печать - O (n), где n - общее количество символов в строке. Так что да, хотя построение строки «чище», это не самый эффективный способ сделать это.
Я бы сделал это следующим образом:
from sys import stdout
printf = stdout.write
Теперь у вас есть «функция печати», которая печатает любую строку, которую вы ей даете, не возвращая каждый раз новый символ строки.
printf("Hello,")
printf("World!")
Результатом будет: Hello, World!
Однако, если вы хотите напечатать целые числа, числа с плавающей запятой или другие нестроковые значения, вам придется преобразовать их в строку с помощью функции str ().
printf(str(2) + " " + str(4))
На выходе будет: 2 4
ВОТ ЭТО ДА!!!
Это довольно долгое время назад
Теперь в python 3.x это будет довольно просто
код:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
вывод:
aaaaaaaaaaaaaaaaaaaa
Подробнее о функции print ()
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
Здесь :
value1,value2,value3
вы можете распечатать несколько значений, используя запятые
sep = '-'
3 значения будут разделены знаком '-'
вы можете использовать любой символ вместо этой четной строки, например sep = '@' или sep = 'good'
end='\n'
по умолчанию функция печати помещает символ '\ n' в конец вывода
но вы можете использовать любой символ или строку, изменив значение конечной переменной
например end = '$' или end = '.' или end = 'Привет'
file=sys.stdout
это значение по умолчанию, стандартный вывод системы
используя этот аргумент, вы можете создать поток выходного файла, например
print("I am a Programmer", file=open("output.txt", "w"))
с помощью этого кода вы создадите файл с именем output.txt, в котором будут храниться ваши выходные данные Я программист
flush = False
Это значение по умолчанию, используя flush = True, вы можете принудительно очистить поток
"".join("a" for i in xrange(20))
. (Это гораздо более гибко, чем просто делать"a" * 20
, поскольку я предполагаю, что это упрощенный пример).