问题出在标题中.
我想在python中做到这一点 .我想在c中的这个例子中做些什么:
#include
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
.
import sys sys.stdout.write('.')
您可能还需要打电话
sys.stdout.flush()
确保stdout
立即冲洗.
从Python 2.6,您可以print
从Python 3 导入该函数:
from __future__ import print_function
这允许您使用下面的Python 3解决方案.
在Python 3中,print
语句已更改为函数.在Python 3中,您可以改为:
print('.', end='')
这也适用于Python 2,前提是您已经使用过from __future__ import print_function
.
如果遇到缓冲问题,可以通过添加flush=True
关键字参数来刷新输出:
print('.', end='', flush=True)
但请注意,在Python 2中导入flush
的print
函数版本中没有该关键字__future__
; 它只适用于Python 3,更具体地说是3.3及更高版本.在早期版本中,您仍然需要通过调用手动刷新sys.stdout.flush()
.
https://docs.python.org/2/library/functions.html#print
https://docs.python.org/2/library/__future__.html
https://docs.python.org/3/library/functions.html#print
它应该像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 >>>
注意:这个问题的标题曾经是"如何在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 ..........
对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
这不是标题中问题的答案,但它是关于如何在同一行上打印的答案:
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('hello world')
Python将其翻译为
print('hello world', end='\n')
您可以将结束更改为您想要的任何内容.
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')
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') `
我最近遇到了同样的问题..
我解决了这个问题:
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上测试过...
心连心
您可以在python3中执行以下操作:
#!usr/bin/python i = 0 while i<10 : print('.',end='') i = i+1
并用python filename.py
或执行python3 filename.py
您会注意到上述所有答案都是正确的。但是我想做一个捷径,总是总是在最后写入“ end =”参数。
你可以定义一个像
def Print(*args,sep='',end='',file=None,flush=False): print(*args,sep=sep,end=end,file=file,flush=flush)
它将接受所有数量的参数。即使它将接受所有其他参数,如file,flush等,并且使用相同的名称。