【发布时间】:2020-04-28 16:19:04
【问题描述】:
我想记录迭代器中事物的数量(而不是试图捕获一个空的迭代器,例如 this question),在我对它进行迭代并为每件事做了其他事情之后。
我的直觉是使用内置的enumerate:
def foo_yielder():
to_yield = ['foo', 'bar']
for x in to_yield:
yield x
for i, x in enumerate(foo_yielder(), start=1):
print(x)
# Now log how many things we printed
print(f"We logged {i} things")
但如果迭代器没有任何可以产生的东西,i 永远不会被定义。
如果这是 Javascript,我会这样做:
`We logged ${i || 0} things`
从 C 中吸取教训,我们可以做到:
i = 0
for x in foo_yielder():
print(x)
i = i + 1
print("We logged " + i + " things.")
但这似乎令人难以置信的蹩脚。
我可以在这里做一件优雅的事情吗?
【问题讨论】:
-
我的特定用例与迭代数据库游标结果有关,如果查询没有返回结果该怎么办。
-
为什么不把
i = 0放在循环之前,如果循环没有破坏i,你会输出0? -
另一种选择是使用 if/else 语句进行设置,但仅定义
i可能仍然是最佳选择。 -
您也可以在
for循环中使用else语句 -
@Gabip 我想让这个问题保持通用性。刚刚添加了一个用于刺激和愉悦的用例。
标签: python