题 如何在没有换行或空格的情况下打印?


问题出在标题中。

我想这样做 。我想在这个例子中做些什么

#include <stdio.h>

int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

输出:

..........

在Python中:

>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .

在Python中 print 将添加一个 \n 还是一个空间,我该怎样避免呢?现在,这只是一个例子。不要告诉我,我可以先构建一个字符串然后打印它。我想知道如何“附加”字符串 stdout


1375
2018-01-29 20:58


起源


对于那些搜索python的字符串格式化文档的人: docs.python.org/library/stdtypes.html#string-formatting - guettli


答案:


一般方式

import sys
sys.stdout.write('.')

您可能还需要打电话

sys.stdout.flush()

确保 stdout 立即冲洗。

Python 2.6+

从Python 2.6你可以导入 print Python 3中的函数:

from __future__ import print_function

这允许您使用下面的Python 3解决方案。

Python 3

在Python 3中, print 语句已被更改为函数。在Python 3中,您可以改为:

print('.', end='')

这也适用于Python 2,前提是您已经使用过 from __future__ import print_function

如果您在缓冲方面遇到问题,可以通过添加来刷新输出 flush=True 关键字参数:

print('.', end='', flush=True)

不过,请注意 flush 关键字在版本中不可用 print 从中导入的函数 __future__ 在Python 2中;它只适用于Python 3,更具体地说是3.3及更高版本。在早期版本中,您仍然需要通过调用手动刷新 sys.stdout.flush()


1896
2018-01-29 21:01



第二个例子不会打印十个空格吗? - Triptych
值得注意的是,在某些情况下,您可能需要打电话 sys.stdout.flush() 手动,如果输出没有立即显示。 - CmdrMoozy
要使用Python 2.6+中的第三个示例,请使用 from __future__ import print_function,建议用于向前兼容。 - Amir Ali Akbari
sys.stdout.write('.') 将适用于2.x和3.x版本,无需任何其他更改。 - Levon
注意 那个 flush 参数[仅适用于python 3.3]为“他们没有将flush参数反向移植到Python 2.7”[1]: stackoverflow.com/questions/230751/... - Kuzeko


它应该像Guido Van Rossum在这个链接中所描述的那样简单:

Re:没有c / r打印怎么样?

http://legacy.python.org/search/hypermail/python-1992/0115.html

是否可以打印一些东西,但不能自动打印   回车附加到它?

是的,在打印的最后一个参数后附加一个逗号。例如, 此循环在由空格分隔的行上打印数字0..9。注意 添加最终换行符的无参数“print”:

>>> for i in range(10):
...     print i,
... else:
...     print
...
0 1 2 3 4 5 6 7 8 9
>>> 

270
2017-07-27 10:09



这是最好的pythonic答案。 - gaborous
由于空格,这在问题中被特别列为不良行为 - Zags
相反,答案应该删除有两个原因:它有不可避免的副作用,你不能禁用(包括额外的空格),并且它不与python 3向前兼容(括号强制转换为元组) 。我希望这些来自PHP的伪劣结构,而不是Python。所以最好不要使用它。 - Eric Leschinski
//,这是在Python 2中完成它的最简单方法,并且有很多一次性代码用于真正的旧操作系统。可能不是最好的解决方案,甚至是推荐的解决方案。然而,StackOverflow的一大优势在于它让我们知道了什么怪异的技巧。 KDP,您是否会在@Eric Leschinski所说的内容中包含一个快速警告?毕竟,它确实有意义。 - Nathan Basanese
@nathanbasanese简单与否,它有副作用 提问者明确不想要。 Downvoted。 - Shadur


注意:这个问题的标题曾经是“如何在python中打印?”

由于人们可能会根据标题来到这里寻找它,Python也支持printf样式替换:

>>> strings = [ "one", "two", "three" ]
>>>
>>> for i in xrange(3):
...     print "Item %d: %s" % (i, strings[i])
...
Item 0: one
Item 1: two
Item 2: three

并且,您可以轻松地乘以字符串值:

>>> print "." * 10
..........

158
2018-01-29 21:24



这是不容忽视的。 - Andrea Ambu
实际上,它缺少重点。 :)由于这个问题已经有了很好的答案,我只是详细阐述了一些可能有用的相关技术。 - Beau
基于问题的标题,我认为这个答案更适合于在C / C ++中如何通常使用printf - Dan
这回答了问题的标题,但没有回答正文。也就是说,它为我提供了我想要的东西。 :) - ayman
@Vanuan,我在答案的底部解释说问题的标题在某些方面发生了变化。 :) - Beau


对python2.6 +使用python3样式的打印函数 (还将破坏同一文件中任何现有的keyworded打印语句。)

# for python2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
    print('.', end='')

为了不破坏所有python2打印关键字,创建一个单独的 printf.py 文件

# printf.py

from __future__ import print_function

def printf(str, *args):
    print(str % args, end='')

然后,在您的文件中使用它

from printf import printf
for x in xrange(10):
    printf('.')
print 'done'
#..........done

更多示例显示printf样式

printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000

85
2018-02-21 20:50





这不是标题中问题的答案,但它是关于如何在同一行上打印的答案:

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()

37
2017-12-03 17:16



每次写入时flush()ing stdout都可能影响性能 - sfk


新的(从Python 3.0开始) print 功能有一个可选的 end 允许您修改结束字符的参数。还有 sep 用于分隔符。


21
2018-01-29 21:07





你可以添加 , 在最后 print 功能因此它不会在新行上打印。


16
2017-07-10 19:45



//,这实际上让它打印出来。我们不需要在最后添加另一个没有参数的print语句,如图所示 stackoverflow.com/a/493500/2146138?您是否愿意使用真正简短的两线或三线示例来编辑此答案? - Nathan Basanese
这个适用于win7上的python2.7 - tqjustc
OP不想要附加空格 - ppperry


使用functools.partial创建一个名为printf的新函数

>>> import functools

>>> printf = functools.partial(print, end="")

>>> printf("Hello world\n")
Hello world

使用默认参数包装函数的简便方法。


14
2018-06-17 01:55





print python中的函数自动生成一个新行。你可以尝试:

print("Hello World", end="")


14
2018-03-14 19:17



这适用但仅适用于python 3 - Tom