python yield在函数中起返回值中的使用

2023-12-29 00:48

本文主要是介绍python yield在函数中起返回值中的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

yield有许多用法,原理真的搞不清,个人用了代码比较的方法,总算大致理解它作为函数返回时所起的作用:

在下面例子中,用yield生成器来提高速度(只要函数内有yield,就是生成器了,或者叫迭代器,这个就不纠结了,他只是定义了我要用这个逻辑去找想要的结果,实际定义生成器时,代码并没有执行,执行是取回的时候发生,并且不是一次全部取回,或许是取回其中一个结果,一看已经对了,后面的执行就没有必要了,python也不会去执行了)

题目:


将一个正整数n表示成一系列的正整数之和:
n=n1+n2+.....+nx(n>n, 3n,>1,k >1)被称做正整数n的一个划分。一个正整数n可能存在着不同的划分,例如正整数6的

全部的划分为:
6-6
6-5+1
6-4+26-4+1+1
6=3+36-3+2+1 6-3+1+1+1
6-2+2+26-2+2+1+16-2+1+1+1+1
6=1+1+1+1+1+1

【分析】
正整数n的不同的划分的个数称为该正整数n的划分数。例如正整数6的划分数为11。
编写一个程序,计算输入的正整数n的划分数。


假设题目要求得到每个排列的结果:

考虑组合(非排列),为了避免重复,就如题中举例,划分数有大到小排列,比如6=5+1,这样1+5就不行
递归:从6里取2作为第一个的话,剩余4再划分时,不能超过2,这样就不会出现3,2,1,然后2,3,1再来一遍的情况:

用了yield作为return使用的程序:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def fulldivision(n,limit):if n==1 or n == 0:yield [n,]else:for i in range(min(n,limit),0,-1):for result in fulldivision(n-i,i):yield [i,] + result
c = 0
for res in fulldivision(6,6):c += 1print ('Solution %d: ' % c,res)

不用yield,手动拼接列表,然后返回的程序(为了对比,保持了原来yield,只是注释掉)

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def fulldivision(n,limit):res = None        #这里要res要初始化if n==1 or n == 0:#yield [n,]return ((n,),)else:for i in range(min(n,limit),0,-1):for result in fulldivision(n-i,i):#    yield [i,] + resultif res == None:      #这里要None判别res = (((i,) + result),)else:res =  res + (((i,) + result),)return resc = 0
for res in fulldivision(6,6):c += 1print ('Solution %d: ' % c,res)

两个程序结果一样:

Solution 1:  (6, 0)
Solution 2:  (5, 1)
Solution 3:  (4, 2, 0)
Solution 4:  (4, 1, 1)
Solution 5:  (3, 3, 0)
Solution 6:  (3, 2, 1)
Solution 7:  (3, 1, 1, 1)
Solution 8:  (2, 2, 2, 0)
Solution 9:  (2, 2, 1, 1)
Solution 10:  (2, 1, 1, 1, 1)
Solution 11:  (1, 1, 1, 1, 1, 1)

这篇关于python yield在函数中起返回值中的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/547843

相关文章

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串