<p>有一种方法可以实现:</p>
<pre><code>def trace_source(point):
if str(point.src1).startswith("Ori") and str(point.src2).startswith("Ori"):
return '('+point.src1+' '+str(point.func)+' '+point.src2+')'
elif str(point.src1).startswith("Ori") and not str(point.src2).startswith("Ori"):
return '('+point.src1+' '+str(point.func)+' '+trace_source(imp_list[point.src2])+')'
elif not str(point.src1).startswith("Ori") and str(point.src2).startswith("Ori"):
return '('+trace_source(imp_list[point.src1])+' '+str(point.func)+' '+point.src2+')'
else:
return '('+trace_source(imp_list[point.src1])+' '+str(point.func)+' '+trace_source(imp_list[point.src2])+')'
</code></pre>
<p>这是基本思想。您可能需要根据数据结构对代码进行一些调整。你知道吗</p>
<p><strong>编辑</p>
<p>我使用给定的类使用以下列表测试了您的代码:</p>
<pre><code>imp_list = []
imp_list.append(PointInfo(None, None, "Ori1", "Ori2", "&"))
imp_list.append(PointInfo(None, None, 0, "Ori3", "|"))
imp_list.append(PointInfo(None, None, 0, "Ori4", "^"))
imp_list.append(PointInfo(None, None, 1, "Ori5", "&"))
imp_list.append(PointInfo(None, None, 3, "Ori6", "&"))
for point in imp_list:
print trace_source(point)
</code></pre>
<p>结果是:</p>
<pre><code>(Ori1 & Ori2)
((Ori1 & Ori2) | Ori3)
((Ori1 & Ori2) ^ Ori4)
(((Ori1 & Ori2) | Ori3) & Ori5)
((((Ori1 & Ori2) | Ori3) & Ori5) & Ori6)
</code></pre>
<p>所以,很显然这是可行的。你知道吗</p>