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
来真正测试它调用的方法相对于它调用的方法的性能。
假设我有以下代码:
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
来真正测试它调用的方法相对于它调用的方法的性能。