此代码目前正在运行,但看起来很糟糕 - 而且在性能方面可能会有很大提升。
任何建议?
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)
非常感谢!
答案 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)
很常见的是,如果代码难看,令人困惑或难以理解,那么它必然效率低下。
许多人还认为,如果你想让代码变得更快,你必须对其进行丑化。
我看到过令人困惑的令人困惑的代码,其中一些代码运行速度非常快,而且其他代码存在大量性能问题。
我也看到过干净,清晰,漂亮的代码,可以这么说。
我的经验 - 速度和美丽是独立的。