假设我在F#中有以下代码:
let rec all_numbers_from k =
yield k
yield! all_numbers_from (k+1)这段代码可以调用为all_numbers_from 0,生成从0到无穷大的所有数字。我知道Python也有一个yield关键字,它看起来很像F#的yield操作符,我的问题是,是不是也有一些与F#的yield!操作符等价的关键字?
发布于 2020-01-06 00:00:01
等效的Python特性应该是yield from。
def all_numbers_from(k):
yield k
yield from all_numbers_from(k+1)然而,这将创建大量的链式生成器,这在Python中是一个很差的实现。有关更好的替代方案,请参阅chepner's answer。
发布于 2020-01-06 00:01:31
虽然yield from是您正在寻找的结构,但是在Python语言中递归地定义这个函数(Co)效率非常低。使用迭代
def all_numbers_from(k):
while True:
yield k
k = k + 1或者直接使用itertools.count(k)。
https://stackoverflow.com/questions/59601574
复制相似问题