在python中,如果我说
print 'h'
我得到字母 h 和换行符。如果我说
print 'h',
我得到字母 h 并且没有换行符。如果我说
print 'h',
print 'm',
我得到字母 h、空格和字母 m。如何防止 Python 打印空间?
打印语句是同一循环的不同迭代,所以我不能只使用 + 运算符。
在python中,如果我说
print 'h'
我得到字母 h 和换行符。如果我说
print 'h',
我得到字母 h 并且没有换行符。如果我说
print 'h',
print 'm',
我得到字母 h、空格和字母 m。如何防止 Python 打印空间?
打印语句是同一循环的不同迭代,所以我不能只使用 + 运算符。
import sys
sys.stdout.write('h')
sys.stdout.flush()
sys.stdout.write('m')
sys.stdout.flush()
您需要调用sys.stdout.flush()
,否则它会将文本保存在缓冲区中,而您将看不到它。
Greg 是对的——你可以使用 sys.stdout.write
不过,也许您应该考虑重构您的算法以累积 <whatevers> 列表,然后
lst = ['h', 'm']
print "".join(lst)
或使用 a +
,即:
>>> 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
直接使用。
为了完整起见,另一种方法是在执行写入后清除软空间值。
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
>>>
因此,使用 __future__ 中的 print_function 可以显式设置 print 函数的sep和end参数。
您可以像 C 中的 printf 函数一样使用 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
. 你怎么解释?空间去哪儿了?
我仍然不能完全弄清楚这里到底发生了什么。有人可以看看我最好的猜测:
,
当你有一个尾随时,我尝试推断规则print
:
首先,让我们假设print ,
(在 Python 2 中)不打印任何空格(空格或换行符)。
然而,Python 2 确实会注意您的打印方式——您使用的是print
、 或sys.stdout.write
还是其他东西?如果您连续两次调用print
,那么 Python 将坚持在两者之间放置一个空格。
print('''first line \
second line''')
它会产生
第一行 第二行
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])