Skip to main content
 首页 » 编程设计

python之循环控制,哪个更高效

2025年05月04日15zhengyun_ustc

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

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

请您参考如下方法:

测试效率的最佳方法之一是使用 timeit模块。我会将每个备选方案放在一个函数中,对每个函数运行 timeit,然后进行比较。