一.实参高阶函数

1.函数作为变量使用

python中声明函数就是声明一个类型是function的变量,变量名就是函数名
普通变量能做的函数都能做:

  • 1).一个变量可以给另一个变量赋值,函数也可以赋值给一个变量
  • 2).变量的值可以修改,函数作为变量并被赋值后,函数原本的功能就消失了
  • 3).变量作为序列中的元素,函数也行
  • 4).变量作为函数的参数,函数也行
    将函数作为另一个函数的参数,这就是实参高阶函数

2.系统的实参高阶函数

列表.sort(); sorted(); max(); min() -> 都有一个参数key,要求是一个函数

例:列表.sort()排序函数,
sort()括号里面有key函数和revers,key函数确定了排序的规则,revers=True时倒序,revers=False时正序

1).排序函数;参数key要求是一个函数,作用是用来定制拍寻的规则
key的要求:
①:key是一个函数
②:函数中有且只有一个参数,这个参数指向的是序列中的每个元素
③:函数需要一个返回值,这个返回值就是排序的时候比较大小的对象
2).最大值函数:

# 练习:进下面的列表按个位数的大小排序
nums = [100, 39, 51, 62, 58]
nums.sort(key=lambda item: item % 10)
print(nums)
print(max(nums, key = lambda item: item % 10))
# 练习:将学生按成绩排序
students = [{'name': '小明', 'age': 18, 'grade': 90},{'name': '小花', 'age': 28, 'grade': 59},{'name': '狗子', 'age': 8, 'grade': 87},{'name': '大黄', 'age': 45, 'grade': 98}
]
students.sort(revers=True, key=lambda item: item['grade']
print(students)
print(max(students, key = lambda item: item['grade']
# 按学生年龄和分数的和排序
students.sort(key = lambda itme: item['age'] + item['grade']
print(students)
print(max(students,key = lambda item: item['age'] + item['grade']

二.返回值高阶函数

1.函数作为函数的返回值 - 返回值高阶函数

#func1就是一个返回值高阶函数
def func1():def func2():print('函数2')return func2

2.闭包 - 函数1中声明了函数2 ,函数2 中使用了函数1中的数据,则函数1就是一个闭包
特点:闭包函数中的数据不会因为函数调用结束而销毁

def func3():a = 10print(id(a))def func4():print(a)print(id(a))return func4

面试题练习:

#不执行以下代码,问以下代码的执行结果
list1 = []
for i in range(5):list1.append(lambda x: x*i)print(list1[1](2), list1[2](2), list1[3](2))def func2(seq=[]):seq.append(10)return seq
print(func2())
print(func2())

三.装饰器

1.什么是装饰器

装饰器本质就是一个函数 装饰器 = 返回值高阶函数+实参高阶函数+糖语法
装饰器是python的三大神器之一:装饰器、迭代器、生成器
装饰器的作用:给已经写好的函数添加新的功能

2.用函数给函数添加功能的方法

方法一

# ①:给不需要参数的函数添加功能
def add_time(fn):star = time.time()fnend = time.time()print('函数执行时间:%fs' % (end - star))# ②:给需要参数的函数添加功能
def add_time2(fn, *args, **kwargs):star = time.time()fn(*args, **kwargs)end = time.time()print('函数执行时间:%fs' % (end - star))def func1():print('======')print('++++++')def func2():print('你好,python')print('你不好,python')def func3(x, y):print('%d+%d=%d' % (x, y, x+y))print(add_time(func1()))
print(add_time(func2()))
print(add_time2(func3, 10, 20))

方法二(装饰器)

无参装饰器函数:
def 函数名1(参数1):
 def 函数名2(*args, **kwargs):
  参数1(*args, **kwargs)
 新功能对应的代码
 return 函数名2

说明:
函数名1 - 装饰器的名称;需要添加的共嗯名称
参数1 - 需要添加功能的函数,一般命名为fn
函数名2 - 随便命名,

# 添加统计函数执行时间的装饰器
def add_time3(fn):def test(*args, **kwargs):star = time.time()re =fn(*args, **kwargs)end = time.time()print(end - star)return rereturn test# 练习>>>>>>>
def exchange_hex(fn):def test(*args, **kwargs):re = fn(*args, **kwargs)if type(re) == int:return hex(re)return rereturn test@exchange_hex
def diy_sum(x, y):return x+yprint(diy_sum(10, 20))

四.迭代器

1.什么是迭代器(iter)

迭代器也是python提供的容器型数据类型
迭代器存储数据的特点:
①:一个迭代器能存多个数据
②:若要获取或查看数据必须要从迭代器中取出
③:取出来的数据不能再添加到迭代器

2.将数据存入迭代器

①:将其他序列转换成迭代器
②:创建一个生成器

3.获取迭代器中的元素

迭代器中的元素只要取出(任何方式)那这个元素在迭代器中就不存在了

1).获取单个元素

next(迭代器) - 取出迭代器中最上面的元素
print(next(iter1))
print(next(iter1))
print(next(iter1))

2).遍历

for x in iter2:
print(‘x:’, x)

第一章 1.11 高阶函数相关推荐

  1. 《JavaScript设计模式与开发实践》——第3章 闭包和高阶函数

    闭包 变量的作用域和生存周期密切相关 高阶函数 函数可以作为参数被传递 函数可以作为返回值输出 转载于:https://www.cnblogs.com/-beauTiFul/p/9092459.htm ...

  2. c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战

    本文涵盖 前言 高级函数概念 函数作为参数的高阶函数 map filter reduce sort详解与实战 函数作为返回值的高阶函数 isType函数与add求和函数 如何自己创建高阶函数 前言 一 ...

  3. python使用高阶函数实现_18.python高阶函数

    什么是高阶函数:一个函数可以作为参数传给另外一个函数(一个函数可以用来接收另一个函数作为参数),或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数.函数的形参位 ...

  4. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  5. Go语言 一级函数 --- 匿名函数、高阶函数、闭包

    文章目录 导言 一级函数 一级函数是什么? 匿名函数 自定义函数类型 高阶函数 将 `x` 函数 作为 `y`函数 的参数 从 `x`函数 中,返回 `y`函数 闭包 一级函数的实际用法 原作者留言 ...

  6. Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  7. 【函数】一篇文章带你看懂控制流、递归、高阶函数

    目录 控制流 条件语句 迭代语句 示例:质因数分解 递归 示例:阶乘 示例:斐波那契数列 示例:判断奇偶数 高阶函数 lambda 表达式 设计函数 示例:累加计算 示例:柯里化 Lab 1: Fun ...

  8. 总结Vue第一天~简单介绍、基本知识、辅助函数和js数组的高阶函数

    目录 vue中文官网 一.简单介绍: (1)vue.js :本质就是一个js 核心类库[跟咱使用的其他组件插件而安装他们]: ■ 安装方式: (2)小demo了解一下vue.js: (3)响应式: 二 ...

  9. 高阶函数||编程范式: 命令式编程/声明式编程 || 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)

    编程范式: 命令式编程/声明式编程 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数) 高阶函数 filter/map/reduce filter中的回调函数有一个要求: 必须返 ...

最新文章

  1. notepad++及Scintilla
  2. Lua 性能相关笔记
  3. 快速排序(quick sort) C++
  4. idea使用MybatisCodeHelperPro逆向生成
  5. 4936: 特殊排序
  6. linux centos 编译Lua5.2.0 静态库 动态库
  7. 三国轶事——巴蜀之危
  8. CV中的经典网络模型
  9. 图像识别_2010暑期实训有感【二】
  10. BERT时代,向量语义检索我们关注什么?
  11. 核信百度空间互踩工具v1.0.0 免费绿色版下载
  12. 文字烫金效果html,PS教程之3D烫金艺术文字效果制作
  13. 网络安全策略和网络安全机制
  14. 浅读C Primer Plus——C语起源
  15. 网络空间安全省赛A解析
  16. 干货 | 携程机票Sketch插件开发实践
  17. 细说字体 Sans Serif 与 Serif
  18. 【实时渲染】实时渲染中的光与颜色
  19. 2012 lt;c语言综合实验gt;答案,厦门理工学院c语言实验4循环答案.doc
  20. 脱贫帮扶绩效评价MATLAB,关于对中牟县2019年脱贫成效考核和扶贫绩效评价奖励资金项目计划安排情况公告公示...

热门文章

  1. 笔记本的外壳用的是复合材料,复合材料是ABS工程塑料吗?如果不是那又是什么材料...
  2. 单细胞专题(二)| 我们的生老病死,被“它”看得透透的
  3. 计算机专业主要学哪些科目,计算机专业都学什么内容 课程有哪些
  4. Lottie-Android详解
  5. 华三讲堂:Overlay网络与物理网络的关系
  6. VS2017安装Newtonsoft.Json插件
  7. Python 操作文档之请假条
  8. Windows XP 任务计划每1分钟运行1次
  9. dumpbin查看lib、dll库中函数
  10. 三菱电梯c语言程序代码破解,三菱电梯LEHY-C故障代码大全