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

Andrea Ambu 1760 python newline python-2.x

问题出在标题中.

我想在做到这一点 .我想在中的这个例子中做些什么:

#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.

codelogic.. 2387

一般方式

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)

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

来源

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/__future__.html
  3. https://docs.python.org/3/library/functions.html#print

  • 有人可以解释为什么我需要“冲洗”吗,它实际上有什么作用? (2认同)
  • 已经晚了几个月,但是要回答@Rishav flush,清空缓冲区并立即显示输出。如果没有刷新,则最终可能会打印出准确的文本,但是只有在系统开始处理图形而不是IO时才可以打印。刷新通过“刷新”缓存使文本立即可见。 (2认同)

小智.. 294

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

Re:如何在没有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
>>> 

  • 由于空格,这在问题中被特别列为不良行为 (95认同)
  • 相反,应删除答案有两个原因:它具有不能禁用的不良副作用(包括额外的空格),并且它与python 3不兼容(括号强制转换为元组) .我希望这些来自PHP的伪劣结构,而不是Python.所以最好不要使用它. (80认同)
  • @nathanbasanese简单与否,它有副作用*提问者明确不要*.Downvoted. (22认同)
  • //,这是在Python 2中完成它的最简单方法,并且有很多一次性代码用于真正的旧操作系统.可能不是最好的解决方案,甚至是推荐的解决方案.然而,StackOverflow的一大优势在于它让我们知道了什么怪异的技巧.KDP,你会在顶部快速警告@Eric Leschinski所说的内容吗?毕竟,它确实有意义. (9认同)
  • 270赞成答案_specifically_不回答问题.良好的工作支持人们.干得好. (8认同)
  • 如何在每个N之后摆脱那个空间,即我想要"0123456 ..." (5认同)
  • 您没有回答问题。“如何不使用换行符或***进行打印?” 他特别说没有空格。 (2认同)
  • @Cylindric:通常人们会通过Google找到与*他们*想要的东西不完全匹配的问题,但答案仍然对他们有用。大概在这291次投票中,大多数来自那些尾随空间不错的人,这与问题的要求不同。这就是SO的工作方式,尤其是针对许多情况下出现的FAQ。它并不能“合理化”这个答案,也不意味着任何一个都是好事,它只是说明了我们如何到达这里,并告诉我们这个答案实际上对很多人有帮助(至少看起来不错)。 (2认同)

Beau.. 164

注意:这个问题的标题曾经是"如何在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
..........

  • 这回答了问题的标题,但没有回答正文.那就是说,它为我提供了我想要的东西.:) (15认同)
  • 实际上,它缺少重点.:)由于这个问题已经有了很好的答案,我只是详细阐述了一些可能有用的相关技术. (9认同)
  • 基于问题的标题,我认为这个答案更适合于在C/C++中如何通常使用printf (7认同)
  • @Vanuan,我在答案的底部解释说,问题的标题在某些时候发生了变化.:) (4认同)
  • 这不是问题的答案 (2认同)
  • 这个答案不再重要了。 (2认同)

k107.. 91

对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


lenooh.. 39

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

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

  • 每次写入时flush()ing stdout都可能影响性能 (9认同)

SilentGhost.. 27

新的(从Python 3.0开始)print函数有一个可选end参数,允许您修改结束字符.还有sep分隔符.


小智.. 20

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

>>> import functools

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

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

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


user3763437.. 16

您可以添加功能,的末尾,print以便它不会在新行上打印.

  • OP不想添加空格 (2认同)

小智.. 11

在Python 3中,打印是一种功能.你打电话的时候

print('hello world')

Python将其翻译为

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

您可以将结束更改为您想要的任何内容.

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


alvas.. 8

你可以试试:

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')


n611x007.. 7

python 2.6+

from __future__ import print_function # needs to be first statement in file
print('.', end='')

的Python 3

print('.', end='')

python <= 2.5

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

如果每次打印后多余的空间都可以,在python 2中

print '.',

在python 2中产生误导 - 避免

print('.'), # avoid this if you want to remain sane
# this makes it look like print is a function but it is not
# this is the `,` creating a tuple and the parentheses enclose an expression
# to see the problem, try:
print('.', 'x'), # this will print `('.', 'x') `


小智.. 6

我最近遇到了同样的问题..

我解决了这个问题:

import sys, os

# reopen stdout with "newline=None".
# in this mode,
# input:  accepts any newline character, outputs as '\n'
# output: '\n' converts to os.linesep

sys.stdout = os.fdopen(sys.stdout.fileno(), "w", newline=None)

for i in range(1,10):
        print(i)

这适用于unix和windows ......还没有在macosx上测试过...

心连心


Subbu.. 5

您可以在python3中执行以下操作:

#!usr/bin/python

i = 0
while i<10 :
    print('.',end='')
    i = i+1

并用python filename.py或执行python3 filename.py


小智.. 5

您会注意到上述所有答案都是正确的。但是我想做一个捷径,总是总是在最后写入“ end =”参数。

你可以定义一个像

def Print(*args,sep='',end='',file=None,flush=False):
    print(*args,sep=sep,end=end,file=file,flush=flush)

它将接受所有数量的参数。即使它将接受所有其他参数,如file,flush等,并且使用相同的名称。


归档时间:

查看次数:

1776380 次

最近记录:

4 月,1 周 前