在容器类中,当我想迭代它的项目(或者它的项目的转换,或者它的项目的子集)时,我可以编写一个生成器(like f
)或返回一个生成器(like g
):
class SomeContainer:
def __init__(self):
self.data = [1, 'two', 3, 'four']
def f(self):
for e in self.data: yield e + e
def g(self):
return (e + e for e in self.data)
sc = SomeContainer()
for x in sc.f(): print(x)
for x in sc.g(): print(x)
我不需要通过send
.
显然,两种方式的行为相同(表面上)。
哪种方法更可取,为什么?
哪种方法会产生更少的开销或具有我没有发现的其他优势?