这个疯狂的循环和ifs序列怎么样?想改进这段代码?

时间:2010-11-13 03:30:46

标签: python optimization loops if-statement

此代码目前正在运行,但看起来很糟糕 - 而且在性能方面可能会有很大提升。

任何建议?

def OnClick():
    global Selection, touch, set_elsb, set_vreg, set_els, BAR_Items
    A = viz.pick(0, viz.WORLD, all=False)
    if touch != A: return
    for i in BAR_Items:
        if not set_els: break
        elif BAR_Items[i] == A or SHAPES[i+"_SHP"] == A:
            if i in Selection:
                Selection.remove(i)
                BAR_Items[i].clearActions()
                VFrame.SetStatusText(frame, i + " has been deselected")
                viz.director( do_chart )
            else:
                Selection.append(i)

非常感谢!

4 个答案:

答案 0 :(得分:1)

我对此的正常处理方法是将其中的一部分重新分解为小方法。这通常使它更易于阅读和阅读。

答案 1 :(得分:1)

这是一些代码行,但我认为它更清晰。

def OnClick():
     if not set_els: return

     # swap this with the line above if viz.pick has side effects that should occur 
     A = viz.pick(0, viz.WORLD, all=False) 
     if touch != A: return


     keys = (key for key in BAR_Items
             if BAR_Items[key] == A or SHAPES[key+"_SHP"] == A)

     for key in keys:
         if key in Selection:
             Selection.remove(key)
             BAR_Items[key].clearActions()
             VFrame.SetStatusText(frame, key + " has been deselected")
             viz.director(do_chart)
         else:
             Selection.append(key)

整个global声明没有任何意义,因为您没有分配任何声明。调用属性和设置键不需要global关键字。

答案 2 :(得分:0)

如果在此代码执行期间未在外部更改set_els,则:

def OnClick():
    global Selection, touch, set_elsb, set_vreg, set_els, BAR_Items
    if set_els: return
    A = viz.pick(0, viz.WORLD, all=False)
    if touch != A: return
    for i in BAR_Items:
        if not (BAR_Items[i] == A or SHAPES[i+"_SHP"] == A): continue
        if i in Selection:
            Selection.remove(i)
            BAR_Items[i].clearActions()
            VFrame.SetStatusText(frame, i + " has been deselected")
            viz.director( do_chart )
        else:
            Selection.append(i)

无论如何,当我看到这样的代码时,我的坏代码检测器会闪烁红灯,特别是有大量的全局代码。

答案 3 :(得分:0)

很常见的是,如果代码难看,令人困惑或难以理解,那么它必然效率低下。

许多人还认为,如果你想让代码变得更快,你必须对其进行丑化。

我看到过令人困惑的令人困惑的代码,其中一些代码运行速度非常快,而且其他代码存在大量性能问题。

我也看到过干净,清晰,漂亮的代码,可以这么说。

我的经验 - 速度和美丽是独立的。