首页 > 解决方案 > 从递归函数返回的列表总是空的

问题描述

我试图从递归函数返回一个列表,为每个深度附加到这个列表,但最终返回的列表总是空的。我不是很有经验的pythonian,所以这可能是一个微不足道的错误。

这是代码:

import pymel.core as pm

def getParent(jnt):
    something = pm.listRelatives(jnt, parent=True);
    if something:
        print 'got parent: ' + something[0]
        return something[0]
    else:
        return None

def getAllParents(jnt):
    parents = []
    parents.append(jnt)
    prnt = getParent(jnt)
    if prnt == None:
        return parents
    else:
        prnts = parents.insert(0, getAllParents(prnt))
        return prnts


selection = pm.ls(sl=True)[0]

parents = getAllParents(selection)

print '\n'
print parents

pm.listRelatives(jnt, parent=True);返回一个字符串列表,如果它不为空,我将获取第一个字符串。

这是输出:

got parent: joint3
got parent: joint2
got parent: joint1


None

任何帮助表示赞赏。

标签: pythonpymel

解决方案


这里:

def getAllParents(jnt):
    # ...
    prnts = parents.insert(0, getAllParents(prnt))
    return prnts

list.insert()(以及所有修改列表的方法sort()等)返回None. 你要:

    parents.insert(0, getAllParents(prnt))
    return parents

反而。


推荐阅读