May*_*day 2 python performance loops python-3.x
我有一个高 cpu 消耗函数,可以说:
def high_cost_function(p):
... lots of operations...
return p
Run Code Online (Sandbox Code Playgroud)
我想在 python 的内部循环下使用它:
例子:
paths1= ['a','b','c']
paths2= ['b','c','d']
[any(x.startswith(high_cost_function(y)) for x in paths1) for y in paths2]
Run Code Online (Sandbox Code Playgroud)
哪个正确返回:[True, True, False]
然而,正如您所看到的,我被迫调用high_cost_function(y)paths1 中的每个 x。
如果这是一个正常的循环,我可能会简单地这样做:
for y in paths2:
tmp_var = high_cost_function(y)
for x in paths1:
...
use tmp_var
...
Run Code Online (Sandbox Code Playgroud)
无论如何,有没有以第一个“pythonical 时尚方式”来实现这一点?
迭代已应用的(生成的) ys列表:high_cost_function
[any(x.startswith(y) for x in paths1) for y in map(high_cost_function, paths2)]
Run Code Online (Sandbox Code Playgroud)