【发布时间】:2011-09-10 03:04:29
【问题描述】:
我想编写一个从不实际产生任何东西的 Python 生成器函数。基本上它是一个“无所事事”的插件,可以被其他期望调用生成器的代码使用(但并不总是需要它的结果)。到目前为止,我有这个:
def empty_generator():
# ... do some stuff, but don't yield anything
if False:
yield
现在,这行得通,但我想知道是否有一种更具表现力的方式来表达相同的意思,即,将函数声明为生成器,即使它永远不会产生任何值。我在上面使用的技巧是在我的函数中向 Python 显示一个 yield 语句,即使它无法访问。
【问题讨论】:
-
出于好奇,为什么它必须是生成器?我无法想象哪种正确的调用者代码可以明确地需要生成器......
-
@static_rtti 我刚刚发现假生成器非常适合延迟加载,具体取决于上下文。
-
@Ekevoo 你能链接到一个例子吗?
-
@static_rtti 这里。我确信有更好的方法来做我所做的事情,但它完成了工作。 github.com/ekevoo/hfbr/blob/…
-
作为记录,我会将
if False: yield放在函数的顶部,以便立即清楚你是什么正在做。这实际上是它相对于return; yield解决方案的一个优势:无论哪种方式,这个构造都充当了声明“我希望这是一个生成器”的注释,我们通常将影响整个函数的注释放在顶部。原因 - 它有助于引导读者。