242

在python中,如果我说

print 'h'

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

print 'h',

我得到字母 h 并且没有换行符。如果我说

print 'h',
print 'm',

我得到字母 h、空格和字母 m。如何防止 Python 打印空间?

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

4

15 回答 15

300

Python 3中,使用

print('h', end='')

抑制 endline 终止符,和

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

抑制项目之间的空格分隔符。请参阅文档print

于 2008-10-31T22:44:14.170 回答
202
import sys

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

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

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

于 2008-10-31T22:35:49.363 回答
44

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

不过,也许您应该考虑重构您的算法以累积 <whatevers> 列表,然后

lst = ['h', 'm']
print  "".join(lst)
于 2008-10-31T22:53:52.027 回答
27

或使用 a +,即:

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

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

于 2009-01-04T11:27:42.423 回答
19
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直接使用。

于 2008-11-01T00:21:28.450 回答
17

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

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

印刷helloworld !

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

于 2008-11-01T00:43:51.040 回答
13

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

    print 'h',
    print '\bm'
于 2013-12-19T09:32:40.503 回答
8

重新控制您的控制台!简单地:

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

于 2009-06-24T04:26:03.730 回答
7

我没有添加新的答案。我只是将最好的标记答案以更好的格式。我可以看到评分的最佳答案是使用sys.stdout.write(someString). 你可以试试这个:

    import sys
    Print = sys.stdout.write
    Print("Hello")
    Print("World")

将产生:

HelloWorld

就这些。

于 2014-10-13T15:46:56.940 回答
4

在 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 函数的sepend参数。

于 2014-04-23T14:27:07.163 回答
1

您可以像 C 中的 printf 函数一样使用 print。

例如

打印 "%s%s" % (x, y)

于 2014-01-26T22:06:39.153 回答
1
print("{0}{1}{2}".format(a, b, c))
于 2014-07-10T21:13:39.137 回答
0

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 将坚持在两者之间放置一个空格。

于 2014-12-04T13:41:52.800 回答
0
print('''first line \
second line''')

它会产生

第一行 第二行

于 2017-02-18T19:21:28.077 回答
-1
import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])
于 2015-04-18T07:21:47.273 回答