【发布时间】:2018-03-18 00:11:04
【问题描述】:
我有时会使用生成器来过滤程序中的某些值,并希望记录过滤后的项目。
让我们假设:
def filter_items(items):
for item in items:
if item.is_wanted():
yield item
def process_items(items):
for item in filter_items(items):
item.do_stuff()
现在我的问题是我想记录实际调用了多少过滤项。
目前我这样做:
def process_items(items):
for count, item in enumerate(filter_items(items)):
item.do_stuff()
try:
count += 1
except UnboundLocalError:
count = 0
print('Processed', count, 'items.')
现在我有一种感觉,检查 UnboundLocalError 有点奇怪,所以我考虑改为默认计数器:
def process_items(items):
count = -1
for count, item in enumerate(filter_items(items)):
item.do_stuff()
print('Processed', count + 1, 'items.')
然而,将默认计数器设置为-1 也看起来很奇怪,因为没有迭代的实际默认值将是0。
但是我不能将其默认为0,因为这样我就无法区分默认值(如果没有迭代元素)或是否迭代了一个元素。
是否有关于在 Python 中默认循环计数器的最佳实践或指南?
【问题讨论】:
标签: python python-3.x for-loop counter