python中的惰性计算
2019年11月26日 - 由Bo 0 评论 1934 阅读
惰性计算(Lazy Evaluation)是指仅在需要执行的时候才计算表达式的值,惰性计算是一种好的编码习惯,可以带来如下好处:
1. 节省计算资源,可提升性能表现。
比如a和b都是一个表达式(条件,计算,对比等)。在python中一个判断'if a and b',当a为false时就不会再计算b的值;同理对于'if a or b', 当a为true时则不会再计算b。
那么对于or的情况我们应该把值很可能为真的表达式放在前面,对于and的情况我们应该把值很可能为假的情况放在前面,这样在大多数情况下,就只会计算前一个表达式,也就节省了计算资源。这在循环很多的时候会显得比较有效。
下图是一个例子,我在jupyter里运行的,可以看出第二种耗时为第一种的85%。
2. 使无限循环的数据结构成为可能。
python中使用惰性计算比较经典的就是生成器(generator),比如只有在需要时才会通过yield计算下一步,那么使用生成器对于超级多的循环数甚至无限循环都不会占用多少资源和空间。
比如:
# this is a list, create all 5000000 x/2 values immediately, uses []
lis = [x/2 for x in range(5000000)]
# this is a generator, creates each x/2 value only when it is needed, uses ()
gen = (x/2 for x in range(5000000))
# with yield
def divide(n):
num = 0
while num < n:
new_num = num / 2
yield new_num
num += 1
print(new_num)
x=divide(5000000)
print(x)
for seq in range(5):
next(x)
# output:
# <generator object divide at 0x7fe08078f0a0>
# 0.0
# 0.5
# 1.0
# 1.5
下一篇:
Vue在做数字更新动画时增加逗号格式化
上一篇:
解决github下载特别慢的方法