pyt*_*Foo 123 python printing string python-2.x
我有这个代码:
>>> for i in xrange(20):
... print 'a',
...
a a a a a a a a a a a a a a a a a a a a
Run Code Online (Sandbox Code Playgroud)
我想输出'a',' '不像这样:
aaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)
可能吗?
mar*_*cog 129
有很多方法可以达到你的结果.如果您只是想为您的案例寻找解决方案,请使用字符串乘法作为@Ant提及.只有在每个print语句都打印相同的字符串时,这才会起作用.请注意,它适用于任何长度字符串的乘法(例如'foo' * 20工作).
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)
如果您想要执行此操作,请构建一个字符串然后再打印一次.这将占用字符串的一些内存,但只能进行一次调用print.请注意,字符串连接使用+=现在是您连接的字符串大小的线性,因此这将很快.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)
或者您可以使用sys.stdout直接执行此操作.write(),它print是一个包装器.这将只写你给它的原始字符串,没有任何格式.请注意,即使在20 a秒结束时也不会打印换行符.
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Run Code Online (Sandbox Code Playgroud)
Python 3将print语句更改为print()函数,该函数允许您设置end参数.您可以通过导入从> = 2.6使用它__future__.我会在任何严肃的2.x代码中避免这种情况,因为对于从未使用过3.x的人来说会有点混乱.但是,它应该让你体验3.x带来的一些善良.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
Run Code Online (Sandbox Code Playgroud)
Ant*_*sse 119
从PEP 3105:打印作为一个函数在什么新的Python 2.6的文档:
>>> from __future__ import print_function
>>> print('a', end='')
Run Code Online (Sandbox Code Playgroud)
显然,只适用于python 3.0或更高版本(或开头的2.6+ from __future__ import print_function).该print语句已被删除,并print()在Python 3.0中默认成为函数.
Pär*_*der 41
您可以通过在print语句之间将空字符串打印到stdout来抑制空间.
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)
但是,更简洁的解决方案是首先构建您要打印的整个字符串,然后使用单个print语句输出它.
Luc*_*ops 34
您可以打印退格符('\b'):
for i in xrange(20):
print '\ba',
Run Code Online (Sandbox Code Playgroud)
结果:
aaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)
cod*_*ape 30
Python 3.x:
for i in range(20):
print('a', end='')
Run Code Online (Sandbox Code Playgroud)
Python 2.6或2.7:
from __future__ import print_function
for i in xrange(20):
print('a', end='')
Run Code Online (Sandbox Code Playgroud)
dav*_*les 10
如果您希望它们一次显示一个,您可以这样做:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
sys.stdout.flush() 每次循环运行时都必须强制写入字符.
小智 7
正如旁注:
打印是O(1)但是构建一个字符串然后打印是O(n),其中n是字符串中的字符总数.所以是的,虽然构建字符串是"更干净",但这不是最有效的方法.
我这样做的方式如下:
from sys import stdout
printf = stdout.write
Run Code Online (Sandbox Code Playgroud)
现在你有一个"打印功能",它打印出你给它的任何字符串,而不是每次都返回新的行字符.
printf("Hello,")
printf("World!")
Run Code Online (Sandbox Code Playgroud)
输出将是:Hello,World!
但是,如果要打印整数,浮点数或其他非字符串值,则必须使用str()函数将它们转换为字符串.
printf(str(2) + " " + str(4))
Run Code Online (Sandbox Code Playgroud)
输出将是:2 4