用Python意外写出的内存炸弹

背景

即本人今日学了几个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
喜欢就点赞支持一下吧,如果觉得不错或日后有所需要,可以收藏文章和关注作者哦。
点赞4打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容