定义两种迭代方式的最Python形式是什么。例如,我有以下原始代码:
refs/tags/*
但是,根据def f1(cat_gen):
for (a, b), c in cat_gen:
if some condition:
yield (a, b), c
,我需要以这种方式进行迭代:
cat_gen
是否有一种方法可以在def f1(cat_gen):
for a, b, c in cat_gen:
if some condition:
yield a, b, c
语句中有条件地将(a, b), c
更改为a, b, c
答案 0 :(得分:1)
您可以这样定义它
def f1(cat_gen):
# Figure out how to iterate, store it in condition_to_iterate
for item in cat_gen:
if condition_to_iterate:
(a, b), c = item
else:
a, b, c = item
# Do whatever you need with a, b, c
答案 1 :(得分:1)
传递一个可以正确评估条件的函数:
def f1(cat_gen, pred):
for item in cat_gen:
if pred(item):
yield item
f1(flat, lambda a, b, c: ...)
f1(nested, lambda ab, c: ...)
或者,在将迭代器传递给f1
之前,将嵌套的元组展平:
def f1(cat_gen):
for a, b, c in cat_gen:
if ...:
yield a, b, c
f1(map(lambda ab, c: (ab[0], ab[1], c), nested))
答案 2 :(得分:0)
如果您希望将其保留为1个函数,并且具有两种不同的返回形式(也许不是最干净的决定,但取决于实现),您可能想要执行以下操作:
def f1(cat_gen, yield_method = 0):
for a, b, c in cat_gen:
if some condition:
if yield_method:
yield a, b, c
else:
yield (a, b), c
并使用户知道第二个参数的返回方式。