在python中,如果我说

print 'h'

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

print 'h',

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

print 'h',
print 'm',

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

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


当前回答

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

但是,也许您应该考虑重构您的算法,以积累一个<whatever >的列表,然后

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

其他回答

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

    print 'h',
    print '\bm'

为了完整起见,另一种方法是在执行写入之后清除软空间值。

import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"

你好世界印刷品!

在大多数情况下,使用stdout.write()可能更方便。

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

sys.stdout.write是(在Python 2中)唯一的健壮解决方案。Python 2打印是疯狂的。考虑下面的代码:

print "a",
print "b",

这将打印一个b,使您怀疑它打印的是一个尾随空格。但这是不正确的。试试这个吧:

print "a",
sys.stdout.write("0")
print "b",

这将打印a0b。你怎么解释?空间到哪里去了?

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

当你的打印上有一个拖尾时,我试图推导出规则:

首先,让我们假设print,(在Python 2中)不打印任何空格(空格或换行符)。

然而,Python 2确实注意到你是如何打印的——你使用的是print,还是sys.stdout。写作,还是别的什么?如果连续两次调用print, Python将坚持在两者之间放置一个空格。

import sys

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

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

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