我以前见过一些Python列表推导,但是这可以在一行Python中完成吗?这怎么能写在一条线上?
errs = {}
for f in form:
if f.errors:
errs[f.auto_id] = f.errors
我以前见过一些Python列表推导,但是这可以在一行Python中完成吗?这怎么能写在一条线上?
errs = {}
for f in form:
if f.errors:
errs[f.auto_id] = f.errors
errs = dict((f.auto_id, f.errors) for f in form if f.errors)
它可能可以,但按照“可读性计数。”规则(PEP 20)的,我会说这是一个坏主意。 :)
您所另一方面“扁平比嵌套的好。”和“稀疏比密集要好。”,所以我想这是一个爱好:)问题
的Python 3.0具有字典推导为由Steef提供的雁较短/更可读的形式:
errs = {f.auto_id: f.errors for f in form if f.errors}
两种方式都是相当的可读性,但你应该把代码的未来的维护者。有时显式更好。列表解析规则虽然:)
来自Haskell背景,我宁愿更短的一个。我同意你的看法,有时可读性更值得,但在这个特殊情况下,我的眼睛因为看到四行这么简单而受到伤害。 – 2009-06-15 09:47:11