【发布时间】:2016-07-07 13:00:08
【问题描述】:
我正在使用2to3 工具从 Py2 -> Py3 移植一堆脚本。一个特别建议的更改让我有点困惑,所以我希望能得到一些帮助:
原行是:
for r in filter(lambda r: r.dir == direction, hm_regions):
... # do stuff with r
hm_regions 持有namedtuples,它有一个名为dir 的属性,并使用这个循环遍历那些匹配给定方向参数的那些。
建议的更改是
for r in [r for r in hm_regions if r.dir == direction]:
我知道这基本上做同样的事情,所以理论上结果应该不会改变(没有尝试过)。但是我发现双 for 循环非常丑陋,我想这不是最漂亮、最优雅的迭代方式。
我也试过for r in hm_regions if r.dir == direction:,由于语法错误而失败,这有点令人沮丧。
编辑:这里的另一个问题是改变是否有意义?我意识到建议更改的根本动机是filter 不再返回列表。但在这种情况下,我不使用列表,只是迭代它。因此它应该也能正常工作,对吧?
【问题讨论】:
-
过滤速度较慢,但物有所值。见this link
标签: python-3.x list-comprehension python-2to3