我正在尝试在Python中建立对象列表。我有一个名为foo
的起始对象,该对象上有一个名为GetParent()
的方法,该方法可返回另一个对象。我想做的是继续调用GetParent()
直到返回None,但要跟踪列表中所有有效的对象。
执行此操作的明显方法似乎是这样的:
objects = list()
result = foo
while result:
objects.append(result)
result = result.GetParent()
出于好奇,您有什么方法可以代替Python在一行或两行中执行此操作?最初,我认为诸如sum / map / reduce之类的东西可能会被滥用以提供所需的行为,但是如果我能弄清楚这一点,我会被该死,因为您需要访问列表的最后一项才能调用{{1} }。
最Python化的方式是什么?
答案 0 :(得分:1)
定义一个generator。
def all_parents(obj):
while obj:
yield obj
obj = obj.GetParent()
那么您可以做:
objects = list(all_parents(foo))
您实际上可能希望将此方法用作您的类中的方法。然后,您将其称为foo.all_parents()
。