Python生成器使用场景2 - 处理无限队列 - 节省cpu 资源

什么是无限队列?

例如常见的斐波那契数列, 自然数队列等
这次我们用素数队列来举个例子



普通方法求素数

首先我用普通的方法编写1个 generate_prime_numbers(n) 的函数, return 1个包含前n个素数的list

def generate_prime_numbers(num=10):count = 1list_primes = [2]  # 用于存储已发现的素数n = 3  # 从3开始检查奇数是否是素数while True:is_prime = Truefor prime in list_primes:if prime * prime > n:breakif n % prime == 0:is_prime = Falsebreakif is_prime:list_primes.append(n)count += 1if count >= num:breakn += 2  # 只检查奇数是否是素数return list_primes# get the No.10 prime number
list_primes = generate_prime_numbers(10)
print(list_primes)  # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
print(list_primes[-1])  # 29# get the No.11 prime number
list_primes = generate_prime_numbers(11)
print(list_primes[-1])  # 31

但我们想求第10个素数时, 我们用10作为参数 调用了这个函数

# get the No.10 prime number
list_primes = generate_prime_numbers(10)
print(list_primes[-1])  # 29

然后获取返回list 中的最后1个值 就是 第10个素数了

但是当我们再想求第11个时, 如果上次执行的结果没有包含, 则要再运算一次, 注意这次运算是从头开始算的, 相当浪费cpu 资源



利用list 对象保存已经求得的素数

为了解决上面的问题, 我们可以令这个函数接受1另1个参数 已知素数的列表


def generate_prime_numbers(num=10, list_known_primes=[]):count = 1list_primes = [2]  # 用于存储已发现的素数n = 3  # 从3开始检查奇数是否是素数if list_known_primes:list_primes = list_known_primescount = len(list_primes)n = list_primes[-1] + 2while True:is_prime = Truefor prime in list_primes:if prime * prime > n:breakif n % prime == 0:is_prime = Falsebreakif is_prime:list_primes.append(n)count += 1if count >= num:breakn += 2  # 只检查奇数是否是素数return list_primes# get the No.10 prime number
list_primes = generate_prime_numbers(10)
# print(list_primes)  # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
print(list_primes[-1])  # 29# get the No.11 prime number
list_primes = generate_prime_numbers(11, list_primes)
print(list_primes[-1])  # 31

这样修改后, 第二此求第11 个素数时 我可以把前10个素数的列表传入 求前11个素数函数作为参数
这样的确能大大节省cpu资源

但是, 它消耗额外内存
而且不太优雅



使用生成器的例子

def generate_prime_numbers():count = 1list_primes = [2]  # 用于存储已发现的素数n = 3  # 从3开始检查奇数是否是素数yield list_primes[-1] # first output 2while True:is_prime = Truefor prime in list_primes:if prime * prime > n:breakif n % prime == 0:is_prime = Falsebreakif is_prime:list_primes.append(n)yield list_primes[-1] # from second to last output herecount += 1n += 2  # 只检查奇数是否是素数return # raise StopIteration# get the No.10 prime number [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
list_primes = generate_prime_numbers()
for i in range(1,10): # from 1 to 9next(list_primes)print(next(list_primes))  # 29 the No.10 prime numberprint("=============================================")# get the No.11 prime numbe
print(next(list_primes))  # 31 the No.11 prime number

区别是

  1. 生成素数的函数不需要1个上限个数参数num了 (普通方法需要否则停不下来), 因为它没输出1个素数就会暂停一次
  2. 也不需要把之前的known_prime 保存在另1个地方, 因为他们保存在生成器本身的1个list里 list_prime
  3. 使用的它的方法跟使用迭代器一样

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何更好地使用Kafka? - 运行监控篇

要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现&#…

牛客NC363 开锁【中等 BFS Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/e7cbabbf7e0a41ec98055ee5f3d33bbe https://www.lintcode.com/problem/796 思路 Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改&#x…

C语言和BASH SHELL中条件表达式的真假与0和1的关系

在C语言中,条件表达式的真假与0和1的关系是非常简单的: 真值:如果条件表达式的结果为非零值,则条件被视为真。假值:如果条件表达式的结果为零值,则条件被视为假。 因此,在C语言中,…

ASP.NET之图像控件

在ASP.NET中,用于显示图像的控件主要是Image控件,Image控件属于ASP.NET Web Forms的一部分,它允许你在Web页面上显示图像。以下是如何在ASP.NET Web Forms中使用 1. 添加Image控件到页面 在ASP.NET Web Forms页面上,你可以通过设…

SpringBoot整合SpringScurity权限控制(菜单权限,按钮权限)以及加上SSH实现安全传输

文章目录 项目地址: 一、md5 与 先进的哈希算法的区别1.1. 安全性问题1.2. 设计目的1.3. 功能特性1.4. 适用性1.5. 总结 二、数据传输安全和数据加密实现:2.1 生成证书:2.2、在springboot中进行集成2.2.1 配置证书:2.2.2. 强制使用…

山东大学机器人实验 matlab部分

山东大学机器人实验 matlab部分 最新更新在Github Github地址吐槽Matlab在Ubuntu里是真的难用感觉Ubuntu配置Matlab的一些问题

4.1 编写程序,从键盘接收一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符

方法一: 运行效果: 输入B,输出显示ABC;输入A,输出显示AB 思路: 1、通过键盘输入接收一个字母。 2、将输入的字母减去1,得到前导字符,然后输出。 3、将输入的字母加上1,得…

基础统计概念

这是一个非常适合初学者的选题,因为理解基础统计概念是学习统计学的第一步。下面我会简要解释这些概念: 1. **均值(Mean):** 在一组数据中,所有数值的总和除以数据的个数。均值是描述数据集中心位置的一种…

Kafka 环境配置与使用总结

# 部署教程参考 # 官方教程: https://kafka.apache.org/quickstart # 单机部署kafka参考: https://blog.csdn.net/u013416034/article/details/123875299 # 集群部署kafka参考: # https://blog.csdn.net/zhangzjx/article/details/123679453 # https://www.cnblogs.com/And…

社群知识付费系统,如何向家长推销课程话术?有什么方法?

很多培训机构都会遇到和家长谈了很久,但是家长就是不签单的情况,其实销售过程就是“逼单”,要掌握技巧,那像家长推销课程有什么话术? ①盲目型家长 特点:对课程一无所知,目的性比较差&#xff0…

【js下载文本文件】

功能 使用js下载dom的文本内容 原理 a标签下载功能 代码 <p id"p2">66666666</p><button onclick"downloadInnerHtml(filename2,#p2)">下载</button><script>var filename2 新建文档; //默认文本名字function downloa…

【问题实操】银河高级服务器操作系统实例分享,开机之后反复重启

1.服务器环境以及配置 物理机/虚拟机/云/容器 物理机 外网/私有网络/无网络 私有网络 处理器&#xff1a; PHYTIUM FT2000PLUS 2200 MHz 内存&#xff1a; 128 GiB 整机类型/架构&#xff1a; HIKVISION DS-V BIOS版本&#xff1a; HK 601FBE02HK 网卡&#xff1…

云原生技术解析

云原生的概念 云原生是一种软件架构和部署方法&#xff0c;旨在利用云计算的优势&#xff0c;以更灵活、可扩展和可靠的方式构建和部署应用程序。它主要关注在容器、微服务、自动化和持续交付等方面。 云原生技术是指以云计算作为基础&#xff0c;以平台和工具为依托&#xff0…

【免费】2024年全新超强版本itvboxfast如意版影视APP源码 TV+手机双端后台PHP源码

首先&#xff0c;让我们了解一下ITVBox如意版影视源码的特点和优势。这一源码基于先进的技术和框架开发&#xff0c;具有稳定、高效的性能&#xff0c;能够满足影视网站的各种需求。与此同时&#xff0c;该源码还提供了丰富的功能和模块&#xff0c;包括影视资源管理、会员系统…

rs6(vmp)瑞某,药某局,商某局,专某局,维某网,cookie + 后缀 的分析解析

文章目录 说在前面rs vmp 特征 介绍解决方法算法补环境运行报错 代码联调补环境框架 补环境导出结果导出cookie导出后缀 效果展示 vx lyj_txd qq 1416279170 # 加我备注来意说在前面 免责声明&#xff1a; 本篇文章只做学习讨论&#xff0c;无商务用途&#xff0c; 未对目标…

线下研讨会 技术沙龙|乐鑫芯片与 ESP RainMaker® 为科技初创企业赋能

众多科技初创企业在智能硬件市场迅猛发展的背景下&#xff0c;对不断变化的需求展现出了高度的敏锐性&#xff0c;期望能够快速将其转化为切实的产品方案。然而&#xff0c;面对复杂繁重的软硬件集成任务&#xff0c;这些企业往往容易陷入研发瓶颈、资金短缺以及效率低下等多重…

C++内存管理new/delete和new[ ]/delete[ ]

1.c/c内存分布 首先看一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd";const char* pChar3 "abcd"; //这里不加const会导致…

汽车客户WiFi问题:WiFi5掉卡,根本原因是PCIE RC没有恢复config space

客户问题&#xff1a;2个不同的汽车客户&#xff08;T&#xff0c;C&#xff09;分别报了2个WiFi 5 掉卡问题。 问题描述&#xff1a; 在MDM4xx with kernel 4.9平台上&#xff0c;尝试做WiFi SSR恢复&#xff0c;发现WiFi5掉卡&#xff0c;PCIE link downr&#xff0c;无法恢…

从 Oracle 到 TiDB,国有大行打造本地生活 APP 新体验

导读 本文介绍了某国有大行推出的本地生活服务类 APP 在数字时代的创新应用实践。该 APP 利用金融科技和互联网平台模式&#xff0c;打造“金融非金融”的线上生态服务平台&#xff0c;满足了用户多样化的生活需求。为应对用户增长和数据量增加带来的挑战&#xff0c;该 APP 决…

【原创】nnUnet V1在win11下的安装与配置

安装之前可以先了解一下论文的主要内容&#xff0c;便于之后网络训练与推理&#xff0c;调试程序。 论文地址&#xff1a;nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation | Nature Methods 也可以从其他博客快速浏览&#xff1a…