我具有生成器函数,并且该函数可以与第一个函数的结果一起工作。例如:
tr
我遇到错误“'gen()'不可写” 如何解决它并使用func的结果?
答案 0 :(得分:0)
您在这里有两个问题。
首先,生成器对象不是序列,而是迭代器。通过像[1]
这样的下标,您无法像对序列一样对迭代器进行索引。您可以使用for
语句或理解来遍历它们,或者在它们完成之前手动对其调用next
,但是不能[1]
。
这就是为什么您会收到一条错误消息,指出生成器对象不可下标。
第二,您还是不想下标生成器。您的生成器产生多个可迭代的对象。它只发生一次yield
,但这与其中只有一对的序列没有什么不同-它仍然与一对不是同一回事。
考虑最接近的序列等效项:
def seq():
a = 2
b = 3
return [(a, b)]
显然,seq()[0]
将成为元组(2, 3)
,而seq()[1]
将成为IndexError
。因此,即使您可以下标生成器,您的代码也没有意义。
您实际上想 要做的是要么选择第一对,要么遍历所有对(我不确定是哪一对)。然后,您可以对这对/每对进行[0]
和[1]
。
那么,要么:
def func():
for pair in gen():
c = pair[0]
d = pair[1]
…或这个
def func():
pair = next(gen())
c = pair[0]
d = pair[1]
或者,如果您确实出于某种原因想要两次调用它,这是
def func():
for pair in gen():
c = pair[0]
for pair in gen():
d = pair[1]
…或这个
def func():
c = next(gen())[0]
d = next(gen())pair[1]
答案 1 :(得分:0)
您要执行的操作是在iterating
上获得第一个和第二个元素,而没有iterator
。您需要iterate
来获取它的值,例如-
for i in gen():
c, d = i # you need this because you are returning a tuple
您可以浏览this帖子以了解有关iterators
和generators
的更多信息