码迷,mamicode.com
首页 > 编程语言 > 详细

Python高阶函数

时间:2018-01-18 11:42:09      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:返回值   一个   机器人   none   分割   元组   默认参数   alt   不同类   

一 、 生成器

使用生成器的原因:列表生成式打印元素时会占用更多的内存,而生成器是每次调用只产生一个值,不会过多占用内存的,生成器又叫惰性求值,延迟计算。
技术分享图片
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高阶函数

标签:返回值   一个   机器人   none   分割   元组   默认参数   alt   不同类   

原文地址:http://blog.51cto.com/11233559/2062330

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!