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

我想用来做。我想在中的此示例中做什么:

在 C 中:

#include <stdio.h>

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

输出:

..........

在 Python 中:

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

在 Python print中将添加\n或空格,如何避免这种情况?现在,这只是一个例子,不要告诉我我可以先构建一个字符串然后再打印它。我想知道如何将字符串 “附加” 到stdout

答案

在 Python 3 中,可以使用print函数的sep=end=参数:

不在字符串末尾添加换行符:

print('.', end='')

不在要打印的所有函数参数之间添加空格:

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

您可以将任何字符串传递给任何一个参数,并且可以同时使用两个参数。

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

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

Python 2.6 和 2.7

在 Python 2.6 中,您可以使用__future__模块从 Python 3 导入print功能:

from __future__ import print_function

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

但是,请注意,在 Python 2 中从__future__导入的print函数的版本中没有flush关键字。它仅适用于 Python 3,更具体地说是 3.3 及更高版本。在早期版本中,您仍然需要通过调用sys.stdout.flush()手动刷新。您还必须在执行此导入操作的文件中重写所有其他打印语句。

或者您可以使用sys.stdout.write()

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

您可能还需要致电

sys.stdout.flush()

确保立即清除stdout

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

回复:如何在没有 ac / 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
>>>

注意:这个问题的标题曾经是 “如何在 python 中使用 printf?” 之类的东西。

由于人们可能会根据标题来这里搜索,因此 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
..........

对 python2.6 + 使用 python3 样式的打印功能(还会破坏同一文件中所有现有的关键字打印语句。)

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

printf.py破坏您的所有 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

如何在同一行上打印:

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

新的(自 Python 3.0 起) print功能具有一个可选的end参数,使您可以修改结束字符。分隔符也有sep

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

>>> import functools

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

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

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

您可以在print功能的末尾添加,这样它就不会在新行上打印。

在 Python 3 + 中, print是一个函数。您打电话的时候

print('hello world')

Python 将其转换为

print('hello world', end='\n')

您可以将end更改为任何您想要的。

print('hello world', end='')
print('hello world', end=' ')

你可以试试:

import sys
import time
# Keeps the initial message in buffer.
sys.stdout.write("\rfoobar bar black sheep")
sys.stdout.flush()
# Wait 2 seconds
time.sleep(2)
# Replace the message with a new one.
sys.stdout.write("\r"+'hahahahaaa             ')
sys.stdout.flush()
# Finalize the new message by printing a return carriage.
sys.stdout.write('\n')