小编Bil*_*eke的帖子

Python3 中的惰性求值

假设我有一个有副作用的函数(在这个例子中,副作用是打印了一些东西)。是否有任何版本的 any() 或列表可迭代的任何构造在找到 True 结果后不会触发副作用?

例如,假设这个函数:

def a(x):
   print("A function got: " + str(x))
   return x == 2
Run Code Online (Sandbox Code Playgroud)

人们可能希望这个电话能奏效。当然,它不会:

any([
  a(i) for i in range(5)
])
Run Code Online (Sandbox Code Playgroud)

哪个打印:

A function got: 0
A function got: 1
A function got: 2
A function got: 3
A function got: 4
Run Code Online (Sandbox Code Playgroud)

但我希望它打印出来:

A function got: 0
A function got: 1
A function got: 2
Run Code Online (Sandbox Code Playgroud)

为什么?Range 是一个可迭代的,列表推导正在产生一个可迭代的,我有点希望 Python 将它们链接在一起并在 any() 函数停止消耗后立即停止执行整个事情,一旦它达到第一个 True 就应该这样做.

我有什么误解?如果有的话,哪个版本会以这种方式运行?

python lazy-evaluation

5
推荐指数
1
解决办法
379
查看次数

标签 统计

lazy-evaluation ×1

python ×1