Ответ 1
Вы можете использовать:
sys.stdout.write('h')
sys.stdout.write('m')
В python, если я скажу
print 'h'
Я получаю букву h и новую строку. Если я скажу
print 'h',
Я получаю букву h и новую строку. Если я скажу
print 'h',
print 'm',
Получаю букву h, пробел и букву m. Как я могу запретить Python печатать пробел?
Операторы печати представляют собой разные итерации одного и того же цикла, поэтому я не могу просто использовать оператор +.
Вы можете использовать:
sys.stdout.write('h')
sys.stdout.write('m')
Просто комментарий. В Python 3 вы будете использовать
print('h', end='')
для подавления концевого терминатора и
print('a', 'b', 'c', sep='')
чтобы подавить разделитель пробелов между элементами.
Грег прав - вы можете использовать sys.stdout.write
Возможно, однако, вам следует рассмотреть возможность реорганизации вашего алгоритма для накопления списка <whatevers> и затем
lst = ['h', 'm']
print "".join(lst)
Или используйте +
, т.е.:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Просто убедитесь, что все объекты с конкатенацией.
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
напрямую.
Для полноты, еще один способ - очистить значение softspace после выполнения записи.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
печатает helloworld !
Использование stdout.write(), вероятно, более удобно для большинства случаев.
Это может показаться глупым, но, кажется, самым простым:
print 'h',
print '\bm'
Восстановите управление своей консолью! Просто:
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, ...
, вы можете расширить этот caper до fprintf (f,...).
Я не добавляю новый ответ. Я просто помещаю лучший помеченный ответ в лучшем формате.
Я вижу, что лучший ответ по рейтингу - это sys.stdout.write(someString)
. Вы можете попробовать:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
даст:
HelloWorld
Вот и все.
В 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__, вы можете явно указать параметры sep и end функции печати.
Вы можете использовать печать как функцию printf в C.
например.
print "% s% s" % (x, y)
print("{0}{1}{2}".format(a, b, c))
sys.stdout.write
- это (в Python 2) единственное надежное решение. Печать на Python 2 безумна. Рассмотрим этот код:
print "a",
print "b",
Это приведет к печати a b
, что приведет к подозрению в том, что оно печатает конечное пространство. Но это неверно. Вместо этого попробуйте:
print "a",
sys.stdout.write("0")
print "b",
Откроется a0b
. Как ты объясняешь это? Где пропали пробелы?
Я все еще не могу понять, что здесь происходит. Может ли кто-нибудь взглянуть на мое лучшее предположение:
Моя попытка вывести правила, когда у вас есть trailing ,
на 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])
print('''first line \
second line''')
он произведет
первая строка второй строки
У меня была такая же проблема, как только я захотел прочитать некоторые цифры из файла. Я решил это так:
f = open('file.txt', 'r')
for line in f:
print(str.split(line)[0])