以下两种选择中哪一种更有效?有什么建议可以进一步改善吗?

备选方案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秒)平均(数字是平均值)要快。

最佳答案

好的,这是一种查看性能的人为方式。由于我们试图看到使用“ continue”或将代码插入“ if block ..”内部的区别。

这是一个小实验。

def f():
    x = {'a':'b', 'c':'d', 'e':'d'}
    for l in x:
        if x[l] != 'd': continue
        print x

def f1():
    x = {'a':'b', 'c':'d', 'e':'d'}
    for l in x:
        if x[l] == 'd':
            print x

import dis
print dis.dis(f)
print dis.dis(f1)


大多数操作是相同的,只是有一点点不同:

在f的情况下:

56 POP_TOP
57 JUMP_ABSOLUTE           34
60 JUMP_FORWARD             1 (to 64)
63 POP_TOP

64 LOAD_FAST                0 (x)
67 PRINT_ITEM
68 PRINT_NEWLINE
69 JUMP_ABSOLUTE           34
72 POP_BLOCK
73 LOAD_CONST               0 (None)
76 RETURN_VALUE


如果是f1:

56 POP_TOP

57 LOAD_FAST                0 (x)
60 PRINT_ITEM
61 PRINT_NEWLINE
62 JUMP_ABSOLUTE           34
65 POP_TOP
66 JUMP_ABSOLUTE           34
69 POP_BLOCK
70 LOAD_CONST               0 (None)
73 RETURN_VALUE


判决

仅一个OP差异。真的不是很对。有等效的。您的决策基于可读性而不是性能。

10-04 14:56
查看更多