打印时不换行(print 'a',)会打印空格,如何去除?
我有这段代码:
>>> 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
这样做可以吗?
13 个回答
你可以通过在两个 print
语句之间打印一个空字符串来消除空格。
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
不过,更好的方法是先把你想打印的整个字符串准备好,然后用一个 print
语句一次性输出它。
来自PEP 3105: 将print作为一个函数,这是在Python 2.6的新特性文档中的内容:
>>> from __future__ import print_function
>>> print('a', end='')
显然,这个功能只适用于Python 3.0及以上版本(或者在2.6及以上版本中,如果在开头加上from __future__ import print_function
)。在Python 3.0中,print
语句被移除了,默认变成了print()
函数。
有很多方法可以实现你的目标。如果你只是想解决你当前的问题,可以使用字符串乘法,就像@Ant提到的那样。这种方法只适用于每个print
语句打印相同的字符串。值得注意的是,这种方法适用于任何长度的字符串乘法(例如,'foo' * 20
是可以的)。
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
如果你想更通用地处理这个问题,可以先构建一个字符串,然后一次性打印出来。这样会占用一些内存来存储这个字符串,但只需要调用一次print
。需要注意的是,使用+=
来连接字符串的效率是线性的,也就是说,连接的字符串越大,速度会越慢,但在一般情况下还是比较快的。
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
或者,你可以更直接地使用sys.stdout的write()方法,print
其实是对这个方法的封装。这样做会直接写入你给定的原始字符串,而不会进行任何格式化。需要注意的是,即使在20个a
的结尾,也不会打印换行符。
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
在Python 3中,print
语句变成了一个print()函数,这个函数允许你设置一个end
参数。你可以通过从__future__
导入来在>=2.6的版本中使用这个功能。不过,我建议在任何严肃的2.x代码中避免使用这个,因为对于从未使用过3.x的人来说,这可能会有点困惑。不过,这应该能让你感受到3.x带来的一些好处。
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>