Via*_*kyi 5 python optimization map python-2.7
我想使用all(map(func, iterables)),因为它很清楚,但我对这种方法是否优化非常感兴趣?例如,如果任何map()未True映射的计算结果应该停止.
我的项目示例:
for item in candidate_menu:
if not item.is_max_meals_amount_ok(daily_menus):
return False
return True
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用类似功能的风格:
all(map(operator.methodcaller('is_max_meals_amount_ok', daily_menus), candidate_menu)
Run Code Online (Sandbox Code Playgroud)
我有任何的优化all(map(...))或any(map(...))在Python?
编辑:板载Python 2.7.
除了all(func(i) for i in iterable)别人建议外,您还可以使用itertools.imap- all(imap(func, iterable)).相比之下map,imap迭代器是一个迭代器,如果all停止消耗它,它将不再进一步发展.
编辑:这个答案对于Python 3来说是不正确的,其中map是一个生成器!
不。all和any是短路的,但map不是:它不知道它是从一些短路代码中调用的,并且总是只返回完整列表。
解决方案是使用生成器表达式:
all(func(i) for i in iterables)
Run Code Online (Sandbox Code Playgroud)
那确实会短路。
如果你想在Python 2.x中进行延迟评估,请尝试:
all(func(i) for i in iterables)
Run Code Online (Sandbox Code Playgroud)
这不会构建整个列表然后评估,不像map.在Python 3.x中,map返回一个迭代器,因此默认情况下是惰性的.
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |