Python高阶函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python高阶函数相关的知识,希望对你有一定的参考价值。

一 、 生成器

使用生成器的原因:列表生成式打印元素时会占用更多的内存,而生成器是每次调用只产生一个值,不会过多占用内存的,生成器又叫惰性求值,延迟计算。
技术分享图片
2 生成器的读取方式
A 使用X.next()进行读取
B 使用for循环进行读取(原因:生成器是可迭代对象)

技术分享图片

生成器简单实例
使用生成器来获得斐波那契数列
技术分享图片

3 yield :能够生成生成器对象的关键字
技术分享图片

使得next()的指针在yield之前停止
技术分享图片

技术分享图片

购买图书的生成器模型
技术分享图片

无缓冲器的定制和购买图书模型
技术分享图片

如果中间有和缓冲区,则需要定义一个列表并将其情况加入列表中
技术分享图片

生成器实战应用:迷你聊天机器人

技术分享图片

二 、内置高阶函数

1 map :将函数func 作用域给定序列(s)的每一个元素,并且用一个列表提供返回值,如果func 为None ,func 表现为一个身份函数,返回一个含有每个序列中元素的集合的n个元组的列表。
技术分享图片

其函数传入值为一个,不能同时传入多个值
技术分享图片

2 reduce:将二元函数作用与seq 序列的元素,每次携带一对(先前的结果以及下一个序列元素)连续第将现有的结果和下一个值作用在获得后的结果上,最后减少我们的序列为一个单一的返回值,如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素
技术分享图片
其函数参数只能传入两个,而不能同时传入多个参数
技术分享图片

3 filter:调用一个布尔函数func 来迭代便利每个seq中的元素,返回一个使func返回值为True 的元素序列

技术分享图片

技术分享图片

4 sorted:用于排序
技术分享图片

技术分享图片
默认reverse=False,表示从小到大的顺序进行排列,若reverse=True 则表示其排列为从大到小的顺序排列
技术分享图片

实例:不区分大小写的情况下对列表中的元素进行排序
技术分享图片

三 、lambda函数(匿名函数)

lambda 函数名:函数返回值
Lamdba 运算符

Lamdba args:expression (对参数进行调用并处理的)
args: 以逗号分割的参数列表
expression: 用到args 中个参数的表达式

Lamdba 语句定义的代码必须是合法的表达式,不能出现多条件语句(可使用if 的三元表达式)和其他非表达式语句,如for 和 while 等
技术分享图片
lambda函数用于计算一个序列的平方并返回一个序列
技术分享图片
lambda 函数联合reduce高阶函数进行对多重列表中的指定元素进行排序
技术分享图片

技术分享图片
技术分享图片
技术分享图片

四 、函数作为返回值,装饰器

闭包
技术分享图片
技术分享图片

函数(方法)装饰器
装饰器背后的主要动机是源自python面向对象编程,装饰器是在函数调用之上的修饰,这些修饰仅是当声明一个函数或者方法的时候,才会应用的额外调用
装饰器的语法是以@开头,接着是装饰器函数的名字和可选参数,紧跟着装饰器声明的是被修饰的函数,和装饰函数的可选参数。

1 基本装饰器的形式
技术分享图片
2 函数中传入默认参数和必须参数的装饰器的使用
技术分享图片
3 导入模块time进行计算函数的执行时间的装饰器的使用
技术分享图片
4 函数中传入可变参数和关键字参数的装饰器的使用
技术分享图片

5装饰器传入值的处理
技术分享图片

6 装饰器中传入多个不同类型的值的装饰器的创建
技术分享图片

五 实战实例:

IP地址查询系统
技术分享图片

以上是关于Python高阶函数的主要内容,如果未能解决你的问题,请参考以下文章

Python_面向对象_高阶函数

初学 Python——高阶函数

python专题高阶函数

python专题高阶函数

python高阶函数

Python 高阶函数的使用