【Python函数和类4/6】递归与匿名函数

目录

目标

匿名函数

多个形参

匿名函数的局限性

递归

语言例子

数学例子

递归的实现

递归代码

练习

总结


目标

        在之前的博客中,我们学习了定义函数、调用函数以及设置函数的参数。在今天,我们会补充函数的两个常见的知识点,一个是匿名函数,另一个是递归函数。下面我们先来看看什么是匿名函数吧~

匿名函数

        在前面,我们使用def 函数名(参数): 的结构来定义一个函数。如果,我们把def定义的函数看作“有名字函数”。那么还有一类函数,无需定义函数名,即匿名函数

        下面这段代码创建了一个匿名函数,并赋值给了变量square。然后通过变量名square调用函数,输出了结果。

# 使用lambda创建匿名函数,并赋值给变量square
square = lambda x:x*x
# 通过变量名square,传入参数9,调用该匿名函数,并输出
print(square(9))

lambda

一个关键字lambda,用来创建匿名函数。

空格

一个空格,是创建匿名函数的固定格式。关键字lambda和后面的式子间要有一个空格。

形参

这个位置是匿名函数的参数,也就是我们前面学习的形参,用于接收实参传递来的数据

冒号:

一个冒号:,是匿名函数的固定格式。冒号前面是形参,冒号后面是进行计算的表达式。

表达式

一个计算形参的表达式,紧跟在冒号后面。这个表达式,就是函数的返回值。也就是说,这个表达式的结果将返回到调用函数的地方。所以,匿名函数可以看作return型函数的简便写法。

变量

将匿名函数的值赋给变量,后续,能通过该变量来调用匿名函数。

调用函数

只要将匿名函数赋值给了变量,就需要通过对应的变量名来调用函数。示例中,通过变量square来调用该匿名函数,在括号()中传入了实参9

多个形参

        当然,匿名函数还可以设置多个形参,形参之间以逗号分隔。实例中,冒号前设置了两个形参x和y,在进行函数调用时,还是采取位置形参的方式依次传递数据。

匿名函数的局限性

        匿名函数使用起来比较方便,但是它也有局限性。一般只能用来改写包含了return的简单函数。示例中,是匿名函数和普通函数的等价写法。

递归

        无论是前面的自定义函数,还是匿名函数, 都是先定义好,然后函数外调用这个函数。其实,函数在自己的内部还可以调用自己,我们把这种函数称为递归函数

        下面,我们通过几个例子来熟悉一下递归的概念。

定义:通常,我们在函数定义中调用函数自身的过程叫做递归

隐喻两面镜子平行放置时,镜子一层一层嵌套自己就是一种递归。

语言例子

        其实,有这样一个通俗的故事最能体现递归:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……

        这里的“故事”嵌套的“故事”,就是“故事”本身。除非讲故事的人自己停下来不讲了,不然这个故事可以“无限”讲下去。

数学例子

        现在,我们假设sum(n)等于前n个正整数的和,即:sum(n)=1+2+3+……+(n-1)+n如果直接计算sum(n),我们可能会从小到大一个数一个数接连相加,1加2再加3……,依次类推。

        那么使用递归的思想,又该如何解决呢?

        递归的核心思想,就是大事化小,即将原始问题拆解为等价的子问题。换句话说,我们要计算sum(n),不妨先去计算更简单的sum(n-1)。但是,由于n变成了n-1,范围变小,为了保证等价,可以用sum(n-1)加上n

        同样的道理,我们要计算sum(n-1),又可以先去计算sum(n-2)。以此类推,一直计算到最简单的sum(1)=1为止。

递归的实现

        如图,我们展示了计算sum(5)的递归过程。首先把sum(5)变成5+sum(4);同理,把sum(4),变成4+sum(3);……以此类推,一直到最简单的sum(1)。然后,我们就能倒推结果。由于知道sum(1),就知道了sum(2),然后可知sum(3)、sum(4)和sum(5)。

递归代码

        简单学习了递归的概念和函数原理后。下面,我们将以计算5以内正整数的累加和为例,来学习递归代码

        这段函数定义一个求和函数sum,并通过递归的方式求得了5以内的数字的累加和。

# 定义名为sum()函数,传入参数n
def sum(n):if n == 1:return 1return n + sum(n-1)# 调用sum()函数,传入参数5,并输出
print(sum(5))

终止条件

        终止条件,是递归执行到满足某一条件后,就返回具体的结果,避免程序无限递归下去。因为,要计算5以内的正整数之和,而最小的正整数为1。所以,示例中n的值为1时,就会将1返回到调用函数处。

递归前进条件

        递归的前进条件,表示函数调用自身的代码,通常是和原函数等价的表达式。通过前面的例子,我们知道sum(n)等于n加上sum(n-1)。所以,函数返回了n+sum(n-1)

练习

200以内求和

定义一个递归函数,用于计算实现 200 以内的正整数之和。将函数名命名为 sum,传入参数为 n。

参考代码

# 定义sum()函数,传入参数n
def sum(n):if n==1:return 1return n+sum(n-1)
# 调用sum()函数,传入200,并输出
print(sum(200))

总结

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

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

相关文章

学浪视频怎么缓存?

缓存学浪视频轻而易举!推荐使用“小浪助手”,一款便捷的工具,助你轻松实现。工具已经预先打包好,需要的朋友可以自行下载。快试试,畅享学习吧! 学浪下载器链接:https://pan.baidu.com/s/1y7vcq…

spring容器

spring容器 实现方式 spring中提供了各式各样的IOC容器的实现供用户选择和使用,使用什么样的容器取决于用户的需要 BeanFactory 该接口是最简单的容器,提供了基本的DI支持。最常用的BeanFactory实现是XmlBeanFactory类,根据XML文件中的定义加…

RetinalNet论文笔记

RetinalNet 概述1. 引言2. 相关工作3. 焦点损失4. RetinaNet Detector 检测器5. 实验6. 结论 3. Focal loss3.1. 平衡交叉熵3.2. 焦点损失定义3.3. 类别不平衡和模型初始化3.4. 类别不平衡和两阶段检测器 4. RetinaNet Detector特征金字塔网络骨干(Feature Pyramid …

PostgreSQL入门到实战-第二十五弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(九)官网地址PostgreSQL概述PostgreSQL中NATURAL JOIN命令理论PostgreSQL中NATURAL JOIN命令实战更新计划 PostgreSQL中表连接操作(九) 使用PostgreSQL NATURAL JOIN从两个表中查询数据。 官网地址 声明: 由于操作系统, 版本更新…

C++实现AVL树

文章目录 一、平衡树的优势二、二叉平衡搜索树的节点定义三、二叉搜索树的插入3.1 寻找插入位置3.2 开始判定平衡因子,平衡因子有变就开始旋转3.2.1 左旋的情况3.2.2 左旋代码(一定要考虑平衡因子为2或者-2的节点是否有父节点)3.2.2 右旋的情…

DC-5渗透测试复现

DC-5渗透测试复现 目的: 获取最高权限以及5个flag 过程: 信息打点-文件包含漏洞-弹shell- scren-4.0.5提权 环境: 攻击机:kali(192.168.85.136) 靶机:DC_3(192.168.85.134) 复现: 一.信息收集 nma…

PlantUML 实战示例(使用 PlantUML 画用例图、类图、活动图、时序图)

目录 前言 需求场景 用例图 类图 活动图 时序图 前言 在软件开发的生命周期中,需要先进行设计,最后才是进行具体的编码和测试。设计时就需要画各种 UML 图,有专业的 UML 画图软件,也有很多在线的 UML 画图网站可以来画图&a…

Dubbo面试回答简单版

一、dubbo特性 超时重试机制地址缓存多版本负载均衡:随机、权重轮询、最少活跃调用、一致性哈希集群容错:失败重试、快速失败、失败安全、失败自动恢复、并行调用、广播服务降级:异常时返回mock 集群容错 FailOver 失败重试,读…

求存款本息和(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <math.h>int main() {//初始化变量值&#xff1b;double P 1000, r1 0.015, r2 0.021, r3 0.0275, r4 0.03, r5 0.0035;int judge 0;//…

富文本编辑器的下载安装使用

为什么选择vue-quill-editor&#xff1f; 在众多的富文本编辑器中&#xff0c;vue-quill-editor因其易用性、灵活性以及对Vue框架友好的特性而受到开发者的青睐。它基于Quill编辑器&#xff0c;Quill是一款现代的WYSIWYG&#xff08;所见即所得&#xff09;编辑器&#xff0c;…

Redis漏洞利用

未授权 可以利用超级弱口令工具来判断redis是否能未授权登录 telnet #尝试登录info #查看redis信息 RCE方法 写shell 需要写权限需要知道web网站路径 config set dir /var/www/html config set dbfilename redis.php set test "<?php phpinfo(); ?>" sa…

UI设计/交互设计/视觉设计项目汇报/作品集Figma/PPT模板

作为UI设计/交互设计/视觉设计师&#xff0c;创建作品集对于向潜在客户或雇主展示您的技能、创造力和风格至关重要。以下分步指南可帮助您创建令人印象深刻的作品集&#xff1a; 选择您的最佳作品&#xff1a;选择您最强大且最相关的设计项目&#xff0c;将其纳入您的作品集。…

AI人工智能讲师大模型培训讲师叶梓 大语言模型(LLM)在科学文献摘要领域的应用

大语言模型&#xff08;LLM&#xff09;在科学文献摘要领域的应用是一个前沿且迅速发展的技术趋势。通过结合GitHub上yobibyte的Compressor项目&#xff0c;我们可以深入探讨这一技术方案的潜力和实现方式。 技术背景 随着科学研究的快速发展&#xff0c;每天都有大量的科学文…

基于8B/10BGT收发器的PHY层设计(1)

一、PHY层简介 PHY层&#xff08;Physical Layer&#xff09;是OSI模型中最低的一层&#xff0c;也是最基本的一层&#xff0c;PHY是物理接口收发器&#xff0c;它实现物理层。包括MII/GMII&#xff08;介质独立接口&#xff09;子层、PCS&#xff08;物理编码子层&#xff09…

王道汽车4S企业管理系统 SQL注入漏洞复现

0x01 产品简介 王道汽车4S企业管理系统(以下简称“王道4S系统”)是一套专门为汽车销售和维修服务企业开发的管理软件。该系统是博士德软件公司集10余年汽车行业管理软件研发经验之大成,精心打造的最新一代汽车4S企业管理解决方案。 0x02 漏洞概述 王道汽车4S企业管理系统…

SQL语言自用(持续更新)+实验记录

课本:《数据库原理及其应用教程》&#xff08;第四版&#xff09; (主编)黄德才&(副主编)陆亿红 实验&#xff1a;学校实验课材料 其他&#xff1a; [ ]表示可以被删除&#xff0c;也表示可以被替换&#xff0c;请自行判断。如果有一些截图或照片&#xff0c;是暂时懒得整…

5、LMDeploy 量化部署 LLMVLM实战(homework)

基础作业&#xff08;结营必做&#xff09; 完成以下任务&#xff0c;并将实现过程记录截图&#xff1a; 配置lmdeploy运行环境 由于环境依赖项存在torch&#xff0c;下载过程可能比较缓慢。InternStudio上提供了快速创建conda环境的方法。打开命令行终端&#xff0c;创建一…

鸿蒙开发快速入门

基本概念 ArkTS 因为ArkTS是基于Type Script扩展而来&#xff0c;是Type Script的超集&#xff0c;所以也可以关注一下Type Script的语法来理解ArkTS的语法 ArkUI HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架…

【日常记录】【CSS】SASS循环的使用

文章目录 1、引言2、安装3、举例4、参考链接 1、引言 目前在任何项目框架中&#xff0c;都会有css 预处理器&#xff0c;目前一般使用 sass、less 这俩其中之一&#xff0c;它可以简化css的书写 Sass 是一款强化 CSS 的辅助工具&#xff0c;它在 CSS 语法的基础上增加了变量 (v…

【深度学习实战(2)】如何使用matplotlib.pyplot模块记录自己的训练,验证损失

一、matplotlib库 在我们自己训练模型时&#xff0c;常常会使用matplotlib库来绘制oss和accuracy的曲线图&#xff0c;帮助我们分析模型的训练表现。 matplotlib库安装&#xff1a;pip install matplotlib 二、代码 import matplotlib.pyplot as plt import torch import to…