gpt4 book ai didi

python - 我可以使方法成为生成器而不是返回生成器吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:17:26 25 4
gpt4 key购买 nike

我想让对象有一个方法,每次调用它时都会从内部列表中返回一个新元素,直到它返回所有元素(但它本身是不可变的)。

虽然我可以存储例如列表中最后查看的元素的索引,我希望对象是不可变的,这样解决方案就出来了。我想在这里使用生成器,但我不知道如何编写它,以便该方法实际上是生成器,而不是返回一个生成器。而且我想从不同的地方访问它,而不是在一个地方的一个循环中,所以我不想每次都需要一个新的生成器。

我试过:

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_neighbor() 本身表现出它返回的实际生成器。我希望我在这里说得通:\

最佳答案

这看起来有点像XY 问题

代替:

  1. 初始化:

    n = Node(1, 2, 3, 4)
  2. 用法(在代码的不同部分):

    next_neighbour = next(n.get_next_neighbour())

,你可以这样做:

  1. 初始化:

    n = Node(1, 2, 3, 4)
    neighbours = n.get_next_neighbour()
  2. 用法:

    next_neighbour = next(neighbours)

注意:

  • 我确定这只是一个拼写错误,但您应该将初始化程序修改为:

    def __init__(self, up, right, down, left):  # self is missing

关于python - 我可以使方法成为生成器而不是返回生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56715362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com