栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python空生成器函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python空生成器函数

您可以

return
在生成器中使用一次;它会停止迭代而不会产生任何结果,因此提供了一种使函数超出范围的明确选择。因此,用于
yield
将函数转换为生成器,但在
return
产生任何内容之前先终止该生成器。

>>> def f():...     return...     yield... >>> list(f())[]

我不确定这是否比您拥有的要好得多-它只是将无操作

if
语句替换为无操作
yield
语句。但这更惯用了。请注意,仅使用
yield
不起作用。

>>> def f():...     yield... >>> list(f())[None]

为什么不只是使用
iter(())

这个问题专门询问一个空的 生成器函数 。因此,我将其视为关于Python语法的内部一致性的问题,而不是一般而言有关创建空迭代器的最佳方法的问题。

如果问题实际上是关于创建一个空迭代器的最佳方法,那么您可能同意Zectbumo关于使用它的

iter(())
替代方法。但是,请务必注意
iter(())
不要返回函数!它直接返回一个空的Iterable。假设您正在使用一个期望可调用的API,该API在每次调用时都会
返回 一个可迭代对象,就像普通的生成器函数一样。您将必须执行以下操作:

def empty():    return iter(())

现在,您可能会发现上面的内容更加清晰,但是我可以想象一下情况不太清楚的情况。考虑以下(伪造的)生成器函数定义列表的示例:

def zeros():    while True:        yield 0def ones():    while True:        yield 1...

在那长列表的末尾,我宁愿看到其中包含

yield
的内容,如下所示:

def empty():    return    yield

或者,在Python
3.3及更高版本中(如DSM所建议的那样):

def empty():    yield from ()

对存在

yield
关键字清楚地在最短的一瞥,这只是另一个发生器功能,所有其他的一模一样。要花更多的时间才能看到
iter(())
版本正在执行相同的操作。

这是一个细微的差异,但是老实说,我认为

yield
基于功能的函数更具可读性和可维护性。

另请参阅user3840170的一个很好的答案,该答案

dis
用来显示此方法可取的另一个原因:编译时它发出最少的指令。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号