[英]for loop in recursive function python
我尝试在递归函数中使用 for 循环来查找子类与其父类相关的所有路径。
class A:
pass
class B(A):
pass
class C(A):
pass
class F(A):
pass
class L(C,B):
pass
class D(B,F):
pass
class M(L,D):
pass
def bases(cls):
if cls == object:
return [object]
for Class in cls.__bases__:
return [cls] + bases(Class)
print(bases(M))
# the output should be this:
# [[M, L, C, A], [M, L, B, A], [M, D, B, A], [M, D, F, A]]
但输出是[M, L, C, A]
。 关键字 Return 不允许 For Loop 做得很好。 然后我写了这样的代码:
for Class in cls.__bases__:
path = [cls] + bases(Class)
return path
输出将是[M, D, F, A]
。 我将return
替换为yield
但它不起作用并且我收到错误:
TypeError: can only concatenate list (not "generator") to list
我该怎么做才能解决这个问题???
使用递归尝试以下实现:
class A:
pass
class B(A):
pass
class C(A):
pass
class F(A):
pass
class L(C,B):
pass
class D(B,F):
pass
class M(L,D):
pass
def bases(cls):
if cls.__bases__ == (object, ): # if "root"
return [cls.__name__]
return [[cls.__name__, *granpas] for base in cls.__bases__ for granpas in bases(base)]
print(bases(M)) # [['M', 'L', 'C', 'A'], ['M', 'L', 'B', 'A'], ['M', 'D', 'B', 'A'], ['M', 'D', 'F', 'A']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.