【发布时间】:2010-11-04 21:30:01
【问题描述】:
以下两种选择中哪一种更有效?有什么进一步改进的建议吗?
备选方案 A:
for i in BAR_Items:
if BAR_Items[i] != A and SHAPE[i+"_SHP"] != A: continue
if i in Selection:
Selection.remove(i)
BAR_Items[i].clearActions()
BAR_Items[i].add(vizact.spinTo(axisAngle=[0,1,0,90],speed=300))
VFrame.SetStatusText(frame, i + " has been deselected. "+ str(Selection))
else:
Selection.append(i)
BAR_Items[i].add(vizact.spin(0,1,0,90,viz.FOREVER))
VFrame.SetStatusText(frame, i + " selected. " + str(Selection))
break
备选方案 B:
for i in BAR_Items:
if BAR_Items[i] == A or SHAPE[i+"_SHP"] == A:
if i in Selection:
Selection.remove(i)
BAR_Items[i].clearActions()
BAR_Items[i].add(vizact.spinTo(axisAngle=[0,1,0,90],speed=300))
VFrame.SetStatusText(frame, i + " has been deselected. "+ str(Selection))
else:
Selection.append(i)
BAR_Items[i].add(vizact.spin(0,1,0,90,viz.FOREVER))
VFrame.SetStatusText(frame, i + " selected. " + str(Selection))
break
好的,我按照建议找到了计时方法。测量 500 次后,B(0.001279264 秒)平均比 A(0.001966169 秒)快(数字为平均值)。
【问题讨论】:
-
当你测量它们时,你学到了什么?请包括运行这些的时间信息。
-
@S.Lott:@relima:除了特殊情况,它还会运行吗?使用列表中的索引和项目是错误的。
-
@pyfunc:“它会运行吗”?很重要。所有“什么更有效”的问题都应包含指标,以表明 (a) 它实际运行和 (b) 哪个更有效。
-
@S.Lott,我正在努力争取在这里跑步,但我不确定它会不会。这段代码在实例化的 opengl 引擎中运行,并且 timit 有问题;我将尝试在更大的 opengl 函数之外重写它,但是不会创建对象并且可能会产生不同的结果。但是,代码总是运行,看起来 A 给了我更高的帧速率。
-
@S.Lott,刚刚测量。 B 比 A 快。
标签: python performance loops