for entry in categories:
print(entry, ", ", end='')
到目前为止,它工作得很好,但现在它没有打印任何东西。如果我删除了最后一部分", end=''"
,那么它可以正常工作,但是我无法在一行中获取所有内容,而不会为每个类别添加新行。
有人可以向我解释为什么它不再有效吗?
答案 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=", ")