如何避免在内部Python风格循环中调用相同的函数

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 时尚方式”来实现这一点?

dec*_*eze 6

迭代已应用的(生成的) 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)