Відповіді:
Існує ряд способів досягнення вашого результату. Якщо ви просто хочете вирішити свій випадок, використовуйте множення рядків, як згадує @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.
Ви можете придушити пробіл, надрукувавши порожній рядок для перекреслення між 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!")
Вихід буде: Привіт, світ!
Однак якщо ви хочете друкувати цілі числа, плавці або інші нерядкові значення, вам доведеться перетворити їх у рядок за допомогою функції 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
, оскільки я припускаю, що це спрощений приклад).