为什么print()不再使用python?

时间:2015-05-18 11:20:46

标签: python

事实上,这应该不是问题,因为它相当基本。我只想打印出一系列类别,但是在一行中用逗号分隔。

for entry in categories:
    print(entry, ", ", end='')

到目前为止,它工作得很好,但现在它没有打印任何东西。如果我删除了最后一部分", end=''",那么它可以正常工作,但是我无法在一行中获取所有内容,而不会为每个类别添加新行。

有人可以向我解释为什么它不再有效吗?

3 个答案:

答案 0 :(得分:3)

您几乎肯定会遇到按行输出缓冲。每次完成一行时都会刷新输出缓冲区,但是通过抑制换行符,你永远不会将缓冲区填充到足以强制刷新的位置。

您可以使用flush=True(Python 3.3及更高版本)或flush()上的sys.stdout方法强制刷新:

for entry in categories:
    print(entry, ", ", end='', flush=True)

您可以稍微简化一下,将, end值设为for entry in categories: print(entry, end=', ', flush=True)

sep

消除条目和逗号之间的空格。

或者,使用逗号作为print(*categories, sep=', ') 分隔符参数将类别打印为一个字符串:

  if @organization.update_attributes(subscription: true,
                                     actioncode: session[:actioncode_id],
                                     subs_exp_date: check_expiration_date(@organization))

答案 1 :(得分:0)

检查categories不是空的 - 这样就不会打印任何内容 - 我也会考虑更改代码以改为使用sep参数(具体取决于categories是):

print(*categories, sep=', ')

例如:

>>> categories = range(10)
>>> print(*categories, sep=', ')
0, 1, 2, 3, 4, 5, 6, 7, 8, 9

然后你不必担心冲洗/拖尾分隔符......

答案 2 :(得分:0)

在Python 3中打印到终端通常是“行缓冲”。也就是说,一旦遇到换行符,整行只会打印到终端。

要解决此问题,您应该在for循环的末尾打印一个新行,或者刷新标准输出。

例如

for entry in categories:
    print(entry, ", ", end='')
print(end='', flush=True) # or just print() if you're not fussed about a newline

但是,有更好的方法可以打印出阵列。例如

print(", ".join(str(entry) for entry in categories))
# or
print(*categories, sep=", ")