写一个发电机或返回发电机?

Hyp*_*eus 10 python generator python-3.x python-internals

在容器类中,当我想迭代其项目(或其项目的变换或其项目的子集)时,我可以编写生成器(如f)或返回生成器(如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)
Run Code Online (Sandbox Code Playgroud)

我不需要通过信息将信息传递给发生器send.

显然两种方式都表现相同(在表面).

  1. 哪种方法更可取,为什么?

  2. 哪种方法可以减少开销,或者具有其他我未能发现的优势?

shx*_*hx2 2

生成器理解(例如 in g())会稍微快一些。

如果您的逻辑变得比您提供的简单示例更复杂,则显式循环(例如 中f())可能会更具可读性。

除此之外,我想不出任何实质性差异。

但请记住他们说的话:

过早的优化是万恶之源!