【发布时间】:2018-04-30 12:08:33
【问题描述】:
我想用类似迭代器的对象获取“下一个资产”,但是(而不是 __next__() 方法)有两种算法加载下一个资产(next1 和 next2 下面),可以实现为一个“准迭代器”,例如:
class AssetLoader(object):
def __init___(self):
pass
def next1(self):
# ...
def next2(self):
# ...
需要明确的是,下一个检索到的对象可能取决于调用next1 和next2 的“历史”,例如:
next1(); next1(); next2(); next1(); next2()
我的问题:这(迭代器中的两种“下一步”步骤)可以实现为生成器函数吗?
我想这可以通过函数引用的全局变量来完成。但是可以不使用全局变量,而是使用一些局部变量来完成吗?
如果当前的 Python 很难或不可能,我们可以讨论如何在 Python 中添加新的语义以使其成为可能吗?
【问题讨论】:
-
您能否提供更多关于选择 next1 或 next2 以获得下一个元素的逻辑?为什么 __next__ 中的简单条件是不够的?
-
这听起来很有趣... OTOH,它可能是XY problem。 ;) 如果你能给我们一个简单的“假”例子,说明你如何将它与它产生的输出一起使用,它会让我们更容易理解你想要做什么。
-
@porton 如果您无法添加更多上下文,您将得不到任何有用的答案。
-
我们不是要你的真实例子。只是一个简单示例,展示了您想要实现的行为类型。然后我们可以 a) 向您展示执行此操作的代码,或者 b) 告诉您为什么使用普通 Python 语法无法做到这一点。 Python 非常强大且用途广泛,因此我对 a) 寄予厚望。但如果没有明确的问题陈述,恐怕您的问题将无法回答。
-
好的。调用生成器的代码会选择红色还是蓝色?如果是这样,那听起来像是
send的工作。