Python懒惰评价?

Python lazy evaluation?

假设我有以下代码:

def my_func(input_line):

    is_skip_line = self.is_skip_line(input_line)  # parse input line check if skip line

    if is_skip_line:
        # do something...

    # do more ...

    if is_skip_line:
        # do one last thing

所以我们检查了出现两次的 is_skip_line (if is_skip_line:)。这是否意味着由于延迟评估,方法 self.is_skip_line(input_line) 将被调用两次?

如果是这样,考虑到 self.is_skip_line(input_line) 很耗时,最好的解决方法是什么?我必须像下面那样 "immediately invoke" 它吗?

is_skip_line = (lambda x: self.is_skip_line(x))(input_line)

谢谢。

这里的误解是这条语句没有被立即调用:

is_skip_line = self.is_skip_line(input_line)

...实际上,

方法 self.is_skip_line 只会被调用 一次。由于您将其分配给一个变量,因此您可以在任何您喜欢的上下文中多次使用该变量。

如果您关心它的性能,那么您可以使用 cProfile 来真正测试它调用的方法相对于它调用的方法的性能。