不带换行符的打印(打印'a',)打印空格,如何删除?

2024-04-16 04:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个密码:

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

我想输出'a',而不是' '这样:

aaaaaaaaaaaaaaaaaaaa

有可能吗?


Tags: in密码forprintxrangeaaaaaaaaaaaaaaaaaaaa
3条回答

来自What’s New in Python 2.6文档中的PEP 3105: print As a Function

>>> from __future__ import print_function
>>> print('a', end='')

显然,这只适用于python 3.0或更高版本(或者2.6+在开头使用from __future__ import print_function)。在Python 3.0中,print语句被删除,并默认成为print()函数。

有很多方法可以达到你的效果。如果您只是想为您的案例找到一个解决方案,请使用string multiplication正如@Ant所提到的那样。只有当每个print语句都打印相同的字符串时,这才起作用。注意,它适用于任意长度字符串的乘法(例如'foo' * 20工作)。

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

如果您一般想这样做,请建立一个字符串,然后打印一次。这将占用字符串的一点内存,但只对print进行一次调用。注意,使用+=的字符串连接现在与要连接的字符串的大小成线性关系,因此这将非常快。

>>> for i in xrange(20):
...     s += 'a'
... 
>>> print s
aaaaaaaaaaaaaaaaaaaa

或者可以更直接地使用sys.stdout.write(),它是print的包装。这将只写入您提供的原始字符串,而不进行任何格式化。注意,即使在20as的末尾也不会打印换行符

>>> import sys
>>> for i in xrange(20):
...     sys.stdout.write('a')
... 
aaaaaaaaaaaaaaaaaaaa>>> 

Python 3将print语句更改为print() function,这允许您设置end参数。您可以在>;=2.6中使用它,方法是从__future__导入。不过,在任何严肃的2.x代码中,我都会避免这种情况,因为对于那些从未使用过3.x的人来说,这会有点让人困惑。不过,它应该能让您体验到3.x带来的好处。

>>> from __future__ import print_function
>>> for i in xrange(20):
...     print('a', end='')
... 
aaaaaaaaaaaaaaaaaaaa>>> 

可以通过将空字符串打印到print语句之间的stdout来抑制空格。

>>> import sys
>>> for i in range(20):
...   print 'a',
...   sys.stdout.write('')
... 
aaaaaaaaaaaaaaaaaaaa

但是,一个更干净的解决方案是首先构建要打印的整个字符串,然后用一个print语句输出它。

相关问题 更多 >