繁体   English   中英

递归函数python中的for循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM