【发布时间】:2010-10-22 18:52:58
【问题描述】:
我正在编写 gtk 代码。我经常有不需要闭包的简短回调,因为它们传递了它们需要的所有参数。例如,我在创建一些 gtk.TreeViewColumns 时有这个循环:
def widthChanged(MAINCOL, SPEC, SUBCOL, expandable):
if expandable: return
w = MAINCOL.get_width()
SUBCOL.set_fixed_width(w)
cl.connect("notify::width", widthChanged, pnlcl, expand)
这可能效率低下,因为函数是在循环的每次迭代中创建的(附带问题:它实际上是,还是优化了?)。但是,我觉得如果我将所有这些单行代码都移到顶层,代码会更加混乱。有意见吗?
【问题讨论】:
-
这个特殊的例子不能写成 cl.connect("notify::width", lambda maincol, spec, subcol, expandable: subcol.set_fixed_width(maincol.get_width()) if not expandable else无,pnlcl,扩展)......虽然不确定这是否或多或少可读,但至少它少了一个。
-
是的,但我的观点是:它比拥有顶级函数效率低。也可能比这个版本可读性差,所以这两种方式都更糟=P
标签: python coding-style performance closures