Как мне запретить Python print добавлять новые строки или пробелы?

В питоне, если я скажу

print 'h'

Я получаю букву h и новую строку. Если я скажу

print 'h',

Я получаю букву h без новой строки. Если я скажу

print 'h',
print 'm',

Я получаю букву h, пробел и букву m. Как я могу запретить Python печатать пространство?

Операторы печати - это разные итерации одного и того же цикла, поэтому я не могу просто использовать оператор +.

Мои текущие эксперименты показывают, что места конечный нет. Вместо этого это начальный пробел если и только если, предыдущая операция вывода была print. Чтобы увидеть себя, чередуйте несколько звонков на print '.', и sys.stdout.write(','). Это безумие. Почему он должен «помнить» то, что было раньше, и соответственно изменять поведение?

Aaron McDaid 04.12.2014 16:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
240
1
292 603
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

Ответ принят как подходящий
import sys

sys.stdout.write('h')
sys.stdout.flush()

sys.stdout.write('m')
sys.stdout.flush()

Вам нужно вызвать sys.stdout.flush(), потому что в противном случае он будет удерживать текст в буфере, и вы его не увидите.

Это отлично сработало для меня. Просто не забудьте выполнить sys.stdout.flush (), когда вы будете готовы отобразить его на экране, иначе он будет удерживать его в буфере, и вы его не увидите. Я использую это, чтобы дать визуальную обратную связь, что скрипт все еще работает, когда он проходит долгое время или цикл for.

Nathan Garabedian 09.05.2012 01:56

Если печатать не удается, не забывайте, что вы можете сделать это: log = sys.stdout.write

Andy Chase 28.07.2012 03:27

Чтобы использовать это, вы должны импортировать sys с помощью import sys

Donald Duck 18.02.2017 22:49

Как вариант этой идиомы: prynt = lambda x : sys.stdout.write (str(x))

Rhubbarb 03.10.2017 12:36

В Python 3 используйте

print('h', end='')

чтобы подавить терминатор конечной линии, и

print('a', 'b', 'c', sep='')

для подавления разделителя пробелов между элементами. См. документация для print

Вы можете from __future__ import print_function в Python 2.6

jfs 02.11.2008 21:10

from будущее import print_function нарушит любые другие операторы печати, использующие старый синтаксис в том же модуле, поэтому, хотя он более элегантен, чем sys.stdout.write, для внесения изменения может потребоваться больше работы.

James 14.01.2014 21:57

Также удобно, если вам нужно перезаписать последнюю строку, используйте end='\r'

Mircea 14.11.2019 21:17

Грег прав - вы можете использовать sys.stdout.write

Тем не менее, возможно, вам следует подумать о рефакторинге вашего алгоритма, чтобы собрать список <whatevers>, а затем

lst = ['h', 'm']
print  "".join(lst)

как вариант этой идиомы: print ''.join(map(str,[1, '+', 2, '=', 3]))

Rhubbarb 03.10.2017 12:28
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 (), вероятно, более удобно для большинства случаев.

согласно документацияЭтот атрибут не используется для управления оператором печати, но позволяет реализации печати отслеживать его внутреннее состояние.

kmad1729 12.09.2016 22:17

Или используйте +, то есть:

>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls

Просто убедитесь, что все объекты могут быть объединены.

или вы можете преобразовать их: print str (me) + str (no) + str (likee) + str (spacees) + str (pls)

fengshaun 20.03.2009 22:27

Это все еще добавляет новую строку.

A.L 25.03.2015 15:26

Восстановите контроль над своей консолью! Просто:

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 - это кортеж ...

Dacav 26.11.2014 11:56

Это может показаться глупым, но кажется самым простым:

    print 'h',
    print '\bm'

Это все еще добавляет новую строку.

A.L 25.03.2015 15:26

Вы можете использовать print как функцию printf в C.

например

напечатайте "% s% s"% (x, y)

Это все еще добавляет новую строку после этого. OP хотел вызвать print несколько раз в цикле и не иметь пробелов или символов новой строки между ними.

Jonathan 10.09.2015 16:49

В 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 несколько раз в цикле и не иметь пробелов или символов новой строки между ними.

Jonathan 10.09.2015 16:50

… Но было бы неплохо прочитать документацию по формату: строка - § Синтаксис строки формата и Встроенные типы - § Строковые методы - str.format

Rhubbarb 03.10.2017 12:49

Я не добавляю новый ответ. Я просто помещаю лучший ответ в лучшем формате. Я вижу, что лучший ответ по рейтингу - использование 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 ().

Jonathan 10.09.2015 16:48
print('''first line \
second line''')

это произведет

first line second line

Другие вопросы по теме