背景
即本人今日学了几个Python的函数,reduce()、filter()、map()。
而后就是自学了推导式,遇到了一道题目,计算1到n的阶乘之和。
但是本人莫名其妙地追求语句数量少,于是使用了多个lambda函数、reduce()函数。
详情见以下内容:
题目
计算 1 至 n 的阶乘之和
代码
写完是这样的,只计算了1到6的阶乘之和,实际上是算不出来的,不是写不出来,只是单纯整活(用lambda和reduce函数),其实要是写的话,写个正常的函数就可以完成了,我后面会给出。
奇奇怪怪的代码如下:
from functools import reduce
lis = reduce(lambda x, y:reduce(lambda a,b:a*b,[x for x in range(1,x+1)])+reduce(lambda c,d:c*d,[y for y in range(1,y+1)]), [i for i in range(1,6)])
print(lis)
然后运行之后,我发现:电脑内存飙升了,从44%一路无感飙升到84%,思考了一下本人电脑内存(8GB板载+32GB可拓展),计算出此次运行炸了个12GB左右的内存。
我称之为:“内存炸弹。”
哈哈哈哈哈,注意:上面这个代码复制过去不要轻易运行,鉴于本人知识有限,不清楚内存不够的电脑运行后会怎么样,具体是操作系统自行杀进程呢,还是说蓝屏死机呢,我也不清楚呢。
以下给出的是正常、可运行的代码:
from functools import reduce
def add_fact(num):
return reduce(lambda a, b: a * b, [i for i in range(1,num+1)])
if __name__ == '__main__':
n = int(input("Please input a number to calculate the sum of factorial:"))
lis = reduce(lambda x,y : x+y, [add_fact(i) for i in range(1,n+1)])
print(lis)
© 版权声明
文章版权归作者所有,如需转载请联系作者。若文章内容侵犯了您的权益,请通过网站底部联系方式联系我们处理(本站具有最终解释权)。如有不便之处,敬请谅解。
THE END
暂无评论内容