В питоне, если я скажу
print 'h'
Я получаю букву h и новую строку. Если я скажу
print 'h',
Я получаю букву h без новой строки. Если я скажу
print 'h',
print 'm',
Я получаю букву h, пробел и букву m. Как я могу запретить Python печатать пространство?
Операторы печати - это разные итерации одного и того же цикла, поэтому я не могу просто использовать оператор +.






import sys
sys.stdout.write('h')
sys.stdout.flush()
sys.stdout.write('m')
sys.stdout.flush()
Вам нужно вызвать sys.stdout.flush(), потому что в противном случае он будет удерживать текст в буфере, и вы его не увидите.
Это отлично сработало для меня. Просто не забудьте выполнить sys.stdout.flush (), когда вы будете готовы отобразить его на экране, иначе он будет удерживать его в буфере, и вы его не увидите. Я использую это, чтобы дать визуальную обратную связь, что скрипт все еще работает, когда он проходит долгое время или цикл for.
Если печатать не удается, не забывайте, что вы можете сделать это: log = sys.stdout.write
Чтобы использовать это, вы должны импортировать sys с помощью import sys
Как вариант этой идиомы: prynt = lambda x : sys.stdout.write (str(x))
В Python 3 используйте
print('h', end='')
чтобы подавить терминатор конечной линии, и
print('a', 'b', 'c', sep='')
для подавления разделителя пробелов между элементами. См. документация для print
Вы можете from __future__ import print_function в Python 2.6
from будущее import print_function нарушит любые другие операторы печати, использующие старый синтаксис в том же модуле, поэтому, хотя он более элегантен, чем sys.stdout.write, для внесения изменения может потребоваться больше работы.
Также удобно, если вам нужно перезаписать последнюю строку, используйте end='\r'
Грег прав - вы можете использовать sys.stdout.write
Тем не менее, возможно, вам следует подумать о рефакторинге вашего алгоритма, чтобы собрать список <whatevers>, а затем
lst = ['h', 'm']
print "".join(lst)
как вариант этой идиомы: print ''.join(map(str,[1, '+', 2, '=', 3]))
Python 2.5.2 (r252:60911, Sep 27 2008, 07:03:14)
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print "hello",; print "there"
hello there
>>> print "hello",; sys.stdout.softspace=False; print "there"
hellothere
Но на самом деле вам следует использовать sys.stdout.write напрямую.
Для полноты картины есть еще один способ - очистить значение мягкого пространства после выполнения записи.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
печатает helloworld !
Однако использование stdout.write (), вероятно, более удобно для большинства случаев.
согласно документацияЭтот атрибут не используется для управления оператором печати, но позволяет реализации печати отслеживать его внутреннее состояние.
Или используйте +, то есть:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Просто убедитесь, что все объекты могут быть объединены.
или вы можете преобразовать их: print str (me) + str (no) + str (likee) + str (spacees) + str (pls)
Это все еще добавляет новую строку.
Восстановите контроль над своей консолью! Просто:
from __past__ import printf
где __past__.py содержит:
import sys
def printf(fmt, *varargs):
sys.stdout.write(fmt % varargs)
потом:
>>> printf("Hello, world!\n")
Hello, world!
>>> printf("%d %d %d\n", 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('\n')
abc
>>>
Дополнительный бонус: если вам не нравится print >> f, ..., вы можете расширить этот капер до fprintf (f, ...).
Мне это понравилось: D. Хорошо то, что он неявно устраняет проблему "something %s" % x, где x - это кортеж ...
Это может показаться глупым, но кажется самым простым:
print 'h',
print '\bm'
Это все еще добавляет новую строку.
Вы можете использовать print как функцию printf в C.
например
напечатайте "% s% s"% (x, y)
Это все еще добавляет новую строку после этого. OP хотел вызвать print несколько раз в цикле и не иметь пробелов или символов новой строки между ними.
В Python 2.6:
>>> print 'h','m','h'
h m h
>>> from __future__ import print_function
>>> print('h',end='')
h>>> print('h',end='');print('m',end='');print('h',end='')
hmh>>>
>>> print('h','m','h',sep='');
hmh
>>>
Таким образом, используя print_function из __future__, вы можете явно установить параметры сен и конец функции печати.
print("{0}{1}{2}".format(a, b, c))
Это все еще добавляет новую строку после этого. OP хотел вызвать print несколько раз в цикле и не иметь пробелов или символов новой строки между ними.
… Но было бы неплохо прочитать документацию по формату: строка - § Синтаксис строки формата и Встроенные типы - § Строковые методы - str.format
Я не добавляю новый ответ. Я просто помещаю лучший ответ в лучшем формате.
Я вижу, что лучший ответ по рейтингу - использование sys.stdout.write(someString). Вы можете попробовать это:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
будет давать:
HelloWorld
Это все.
sys.stdout.write - (в Python 2) единственное надежное решение. Печать Python 2 - это безумие. Рассмотрим этот код:
print "a",
print "b",
Это напечатает a b, что заставит вас подозревать, что он печатает конечный пробел. Но это не так. Попробуйте вместо этого:
print "a",
sys.stdout.write("0")
print "b",
Это напечатает a0b. Как вы объясните это? Куда делись пространства?
Я до сих пор не могу понять, что здесь происходит на самом деле. Может ли кто-нибудь просмотреть мое лучшее предположение:
Моя попытка вывести правила, когда у вас есть конечный , на вашем print:
Во-первых, предположим, что print , (в Python 2) не печатает пробелов (пробелы ни новой строки).
Однако Python 2 обращает внимание на то, как вы печатаете - вы используете print, sys.stdout.write или что-то еще? Если вы сделаете два вызова последовательный к print, Python будет настаивать на добавлении пробела между ними.
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])
В принятом ответе Грега Хьюгилла уже упоминалась sys.stdout.write ().
print('''first line \
second line''')
это произведет
first line second line
Мои текущие эксперименты показывают, что места конечный нет. Вместо этого это начальный пробел если и только если, предыдущая операция вывода была
print. Чтобы увидеть себя, чередуйте несколько звонков наprint '.',иsys.stdout.write(','). Это безумие. Почему он должен «помнить» то, что было раньше, и соответственно изменять поведение?