【python】Generator 向右看齐 2022-09-12 05:52 75阅读 0赞 ### 文章目录 ### * Generator的理解 * * 1. what is the generator * 2. why ues generator * 3. 总结 # Generator的理解 # 本篇博文主要围绕两个知识点展开: 1. what is the generator 2. why use generator -------------------- ## 1. what is the generator ## generator是一个生成器,那你可能会问,什么又是生成器那? > 关于生成器,举个例子:你家要开包子铺,买了一个制作包子的机器,想要几个包子就用这个机器制作几个包子,而这个制作包子的机器就是一个生成器。 **生成器**:可以使用`next()`,生成一个个东西;是一个iterable(是一个for循环,可以被遍历的东西)。 import memory_profiler as mem # 查看内存大小 # 数字大一点 yi = 100000000 nums = list(range(10000000)) print(f'内存前:{ mem.memory_usage()}') # squre_nums = [n*n*yi for n in nums] # 直接生成一千万个 squre_nums = (n*n*yi for n in nums) # 需要的时候,调用next(),直至生成一千万个,并没有真正的在内存中生成 print(squre_nums) print(f'内存后:{ mem.memory_usage()}') ![在这里插入图片描述][13d13095d58b4c8fa36f31efacf6848c.png_pic_center] ## 2. why ues generator ## 简而言之,当列表很大的时候,generator阿三找需要给你产生,并不会一次性生成而占用大量内存。例如前面我们距离制作包子的以下就是一个很好的例子: import memory_profiler as mem # 查看内存大小 # 数字大一点 yi = 100000000 nums = list(range(10000000)) print(f'内存前:{ mem.memory_usage()}') squre_nums = [n*n*yi for n in nums] # 直接生成一千万个 # squre_nums = (n*n*yi for n in nums) # 需要的时候,调用next(),直至生成一千万个,并没有真正的在内存中生成 print(f'内存后:{ mem.memory_usage()}') ![在这里插入图片描述][add97cad5dde46c6b9f4a9f1fb550f3b.png_pic_center] 当使用generator时: import memory_profiler as mem # 查看内存大小 # 数字大一点 yi = 100000000 nums = list(range(10000000)) print(f'内存前:{ mem.memory_usage()}') squre_nums = (n*n*yi for n in nums) # 需要的时候,调用next(),直至生成一千万个,并没有真正的在内存中生成 print(f'内存后:{ mem.memory_usage()}') ![在这里插入图片描述][21dd3aa86dfa4a478e9e13ada93a98ed.png_pic_center] ## 3. 总结 ## 总结一句话就是,使用generator可以节约内存。 [13d13095d58b4c8fa36f31efacf6848c.png_pic_center]: /images/20220828/cde9349e6d444428a4fb8fe75638b658.png [add97cad5dde46c6b9f4a9f1fb550f3b.png_pic_center]: /images/20220828/8370596fe60646b1a64c89a85bd57816.png [21dd3aa86dfa4a478e9e13ada93a98ed.png_pic_center]: /images/20220828/1979ede199714a5a817065d9908cc2c9.png
还没有评论,来说两句吧...