以功能样式制作的联结功能

以功能样式制作的联结功能,第1张

功能样式制作的联结功能

这似乎可行,但仍然很懒:

def conjoin(gs):    return [()] if not gs else (        (val,) + suffix for val in gs[0]() for suffix in conjoin(gs[1:])    )def range3():    return range(3)print list(conjoin([range3, range3]))

输出

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

显示可变状态的示例用法:

x = ""def mutablerange():    global x    x += "x"    return [x + str(i) for i in range(3)]print list(conjoin([range3, mutablerange]))

输出:(观看不断增加的“ x”数)

[(0, 'x0'), (0, 'x1'), (0, 'x2'), (1, 'xx0'), (1, 'xx1'), (1, 'xx2'), (2, 'xxx0'), (2, 'xxx1'), (2, 'xxx2')]

如果我们使用

itertools.product

x = ""print list(itertools.product(range3(), mutablerange()))

结果如下:

[(0, 'x0'), (0, 'x1'), (0, 'x2'), (1, 'x0'), (1, 'x1'), (1, 'x2'), (2, 'x0'), (2, 'x1'), (2, 'x2')]

因此,可以清楚地看到,它

itertools.product
缓存了迭代器返回的值。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5617616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存