【发布时间】:2019-11-05 00:12:34
【问题描述】:
我希望对象有一个方法,每次调用它时都会从内部列表中返回一个新元素,直到它返回所有元素(但它本身是不可变的)。
虽然我可以存储例如列表中最后一个查看元素的索引,我希望该对象是不可变的,因此该解决方案已解决。 我想在这里使用生成器,但我不知道如何编写它,以便该方法实际上是生成器,而不是返回一个。而且我想从不同的地方访问它,而不是在一个地方的一个循环中,所以我不想每次都使用新的生成器。
我试过了:
class Node:
def __init__(up, right, down, left):
self.up = up
self.right = right
self.down = down
self.left = left
def get_next_neighbour(self):
for neighbour in [self.up, self.right, self.down, self.left]:
if neighbour is not None:
yield neighbour
我尝试这样访问它:
n = Node(1, 2, 3, 4)
next_neighbour = next(n.get_next_neighbour()) # returns 1
然后,在代码的完全不同的部分,但使用相同的对象:
next_neighbour = next(n.get_next_neighbour()) # returns 1 again, while I want 2
我意识到get_next_neighbour() 每次都会返回一个新的生成器,所以这就是为什么我总是得到 1。我只想让get_next_neighbour() 本身表现它返回的实际生成器。我希望我在这里有意义:\
【问题讨论】:
标签: python python-3.x generator python-3.7 yield