《Python学习手册 第五版》 -第19章 函数的高级话题

前面的几章讲解了函数的基础、作用域、参数,在这些基本知识之上还有一些相对高级的内容,本章会集中讲解一些

本章重点内容

1、递归函数

2、函数属性和注解

3、lambda表达式

4、函数式编程工具(map、filter)

针对以上四点内容,接下来分别重点讲解

1、递归函数

递归函数简单来说,就是在函数内部,重新调用自身的函数,这样说可能感觉也比较抽象,其实还是通过代码来理解会更直观一些,以下代码示例:

 

 这是一个列表求和的函数,函数mysum()的内部,调用了函数自身mysum(L[1:]),这样的函数就是递归函数,

通过以上代码,可能还不是很清楚这个函数在调用时时如何运算的,我们可以增加一行代码(print),来显示每次调用函数的情况,具体代码示例如下:

 

 通过增加的一行print,我们可以看到,每次函数调用的数据,也就是每次取一个数据出来,直到没有数据可取,然后把取出来的数据依次求和在一起

2、函数属性和注释

Python是面向对象的程序编程,所以从一切皆对象的角度看,函数也是Python的对象,既然是对象,就有属性,之前的第15章(《Python学习手册 第五版》 -第15章 文档)中有介绍过查看对象属性的方式,所以同样的方式也是可以查看函数的属性,还是依上述mysum函数为例,可以查看一下在函数创建中,系统为函数自动创建了哪些属性,代码操作示例如下:

 

 

 系统为函数自动创建的属性命名有一个特点,一般都是前面和后面都有双下划线,为什么会这样?我的理解,主要是为了避免与使用者增加函数属性命名有关

有些编程软件,在查看函数属性时,可以提供自动选择项,如下:

 

 

 从中也可以看出函数相关的属性,如果对属性不理解,其实很容易,通过help查看属性说明

 

 

 以上讲解的是函数的属性,此外函数还可以有注解,也就是与函数和参数和结果相关的任意用户定义的数据,通过代码来理解会更容易:还是依上面的代码为基础,进行调整

 

 

 其中“列表”是对参数L的注解,其中【-> int】是对函数返回值得注解,也就是说需要传入一个列表,返回一个整数

3、lambda表达式

lambda表达式是什么?先看代码:

 

 

 lambda是一个表达式,而不是语句,主体是一个单独的表达式,而不是一个代码块,

lambda实现的操作,其实都是可以通过函数实现,但是为什么还需要lambda?虽然可以通过函数实现,但是很多时候,我们想要的功能其实没有那么负责,如果是想先定义一个函数再调用,反馈显得很复杂,而这个时候,通过lambda快速实现我们想要的功能,就显得快速、简洁,而且从代码结构上来看,都有一种简洁的美感

4、函数式编程工具(map、filter、reduce)

在可迭代对象上映射函数:map

map可以实现,针对每个对象调用函数,例如,我们有一个列表,相对其中每个元素都增加10,代码示例如下:

 

 

 结合刚才介绍的lambda,可以对这个代码再精简,不用声明函数,直接使用,代码如下:

 

 

 选择可迭代对象中的元素:filter

通过filter可以选出符合条件要求的元素,还是用以上代码为基础进行修改,选择大于3的数出来,代码示例如下:

 

 

 合并可迭代对象中的元素:reduce

通过reduce可以事项对所有元素进行聚合的操作,例如将所有元素相加求和,相乘求积,代码示例如下:

 

 

 直接使用reduce系统会提示代码错误,说该函数没有被定义,这是因为reduce在functools模块中,需要先导入模块,如下:

 

 

 这样就可以使用成功了,同样的结构,如何将所有元素乘积,你可以自己动手试一下

以上,就是本章讲解的全部内容!下章再见!

 

《Python学习手册 第五版》 每章时间规划及完成进度:

2019.11.25-2019.12.01 第01章,已完成:《Python学习手册 第五版》 -第1章 问答环节

2019.12.02-2019.12.08 第02章,已完成:《Python学习手册 第五版》 -第2章 Python如何运行程序

2019.12.09-2019.12.15 第03章,已完成:《Python学习手册 第五版》 -第3章 你应如何运行Python程序

2019.12.16-2019.12.22 第04章,已完成:《Python学习手册 第五版》 -第4章 介绍Python对象类型

2019.12.23-2019.12.29 第05章,已完成:《Python学习手册 第五版》 -第5章 数值类型

2019.12.30-2020.01.05 第06章,已完成:《Python学习手册 第五版》 -第6章 动态类型

2020.01.06-2020.01.12 第07章,已完成:《Python学习手册 第五版》 -第7章 字符串基础

2020.01.12-2020.01.19 第08章,已完成:《Python学习手册 第五版》 -第8章 列表与字典

2020.01.20-2020.01.26 第09章,已完成:《Python学习手册 第五版》 -第9章 元组、文件与其他核心类型

2020.01.27-2020.02.02 第10章,已完成:《Python学习手册 第五版》 -第10章 Python语句简介

2020.02.03-2020.02.09 第11章,已完成:《Python学习手册 第五版》 -第11章 赋值、表达式和打印

2020.02.10-2020.02.16 第12章,已完成:《Python学习手册 第五版》 -第12章 if测试和语法规则

2020.02.17-2020.02.23 第13章,已完成:《Python学习手册 第五版》 -第13章 while循环和for循环

2020.02.24-2020.03.01 第14章,已完成:《Python学习手册 第五版》 -第14章 迭代和推导

2020.03.02-2020.03.08 第15章,已完成《Python学习手册 第五版》 -第15章 文档

2020.03.09-2020.03.15 第16章,已完成:《Python学习手册 第五版》 -第16章 函数基础

2020.03.16-2020.03.22 第17章,已完成:《Python学习手册 第五版》 -第17章 作用域

2020.03.23-2020.03.29 第18章,已完成:《Python学习手册 第五版》 -第18章 参数

2020.03.30-2020.04.05 第19章,已完成

2020.04.06-2020.04.12 第20章,未完成

2020.04.13-2020.04.19 第21章,未完成

2020.04.20-2020.04.26 第22章,未完成 

2020.04.27-2020.05.03 第23章,未完成

 

以下链接,可以供你了解这个学习笔记的所有章节最新进度

自学笔记系列:《Python学习手册 第五版》 -写在开始之前

posted @ 2020-04-10 06:02  诡刺-ThornSoul  阅读(374)  评论(0编辑  收藏  举报