【发布时间】:2014-01-13 11:00:03
【问题描述】:
我正在尝试编写一个函数来打印带有十进制轮廓编号的对象层次结构树(在 Blender 3D 中,但这是一个通用的 Python 问题)。
我需要:
- 带有任何符号的可选缩进,例如
"+"或"--"或没有缩进"",以及 - 一个可选的附加
".0"到具有子节点的节点以区分分支和叶子。
例如,在 Blender 中,我创建了一个带有骨骼和层次结构的骨架,如下所示:
+ Life
++ Bacteria
++ Eukaryota
+++ plants
+++ animals
++++ Vertebrates
+++++ amphibians
+++++ reptiles
+++++ mammals
在 de Text Editor 中,我创建了这个基本脚本:
import bpy
D = bpy.data
root = D.armatures['Armature'].bones['Life']
def print_hierarchy(obj, indent = "+"):
print(indent, obj.name)
for child in obj.children:
print_hierarchy(child, indent+"+")
print_hierarchy(root)
此脚本输出:
+ Life
++ Bacteria
++ Eukaryota
+++ plants
+++ animals
++++ Vertebrates
+++++ amphibians
+++++ reptiles
+++++ mammals
我希望它看起来像这样
1.0 Life
1.1 Bacteria
1.2.0 Eukaryota
1.2.1 plants
1.2.2.0 animals
1.2.2.1.0 Vertebrates
1.2.2.1.1 amphibians
1.2.2.1.2 reptiles
1.2.2.1.3 mammals
我已经修改了(递归)函数print_hierarchy(),但每次我尝试向其添加新内容时它都会中断。我想不通,所以我需要一些帮助。
对于这类事情,while 循环是否比递归函数更好/更有效/更快?
【问题讨论】:
标签: python-3.x blender