如何保持Python打印不添加换行符或空格?

在python中,如果我说

print 'h'

得到字母h和换行符。如果我说

print 'h',

我得到了字母h,没有换行符。如果我说

print 'h',
print 'm',

我得到字母h,一个空格,和字母m。我如何阻止Python打印空格?

print语句是同一个循环的不同迭代,所以我不能只使用+运算符。

305297 次浏览
import sys


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


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

你需要调用sys.stdout.flush(),否则它会将文本保存在缓冲区中,而你看不到它。

Python 3中,使用

print('h', end='')

来抑制结束线终止符,和

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

禁用项之间的空格分隔符。看到print的文档

Greg是对的——您可以使用sys.stdout.write

不过,也许您应该考虑重构您的算法,以积累一个<然后

lst = ['h', 'm']
print  "".join(lst)
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

只要确保所有对象都是可连接的对象。

重新控制你的控制台!简单:

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,…)。

这看起来很愚蠢,但似乎是最简单的:

    print 'h',
print '\bm'

你可以像使用C语言中的printf函数一样使用print。

如。

打印“%s%s”% (x, y)

在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
>>>

因此,使用__future__中的print_function,你可以显式地设置print函数的9月结束参数。

print("{0}{1}{2}".format(a, b, c))

我没有添加一个新的答案。我只是把最好的答案用更好的格式写出来。 我可以看到,最佳答案的评级是使用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。你怎么解释?空格去哪儿了?< / em >

我还是不太明白这到底是怎么回事。谁能看看我的最佳猜测:

当你的__ABC1上有一个尾随,时,我试图推导规则:

首先,让我们假设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''')

它会产生

第一行,第二行