IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python高阶函数学习总结(mapfilterreduce递归函数简介闭包函数) -> 正文阅读

[Python知识库]Python高阶函数学习总结(mapfilterreduce递归函数简介闭包函数)

1、高阶函数定义

函数的入参或返回值中有函数,就可以成为高阶函数
入参中有函数的:
在这里插入图片描述
返回值中有函数的:

def func1():
    print('正在执行func1')
def func2():
    print('正在执行func2')
    return func1
res=func2()
res()   #注意调用,调用返回值的函数
#func2()()   #或者写成这种格式,直接调用

在这里插入图片描述
参数和返回值都有函数的:

def func1():
    print('正在执行func1')
def func2(func): #入参有函数名
    func()   #参数传入函数名,即调用对应的函数
    print('正在执行func2')
    return func3  #返回值有函数名
def func3():
    print('正在执行func3')

func2(func1)()

在这里插入图片描述

2、map函数(循环函数)

map函数作用:对给定序列中的每个元素都应用一个函数操作
map(func,*iterable)–>map对象
map函数本身是个迭代器,第一个参数是函数,注意是函数名,可以是自定义的,也可以lambda,后面的参数是序列,可以传入多个,返回一个map 对象

示例1,参数是一个序列

def self_pow(x):
    return 2**x
m=map(self_pow,[1,2,3,4])  #调用map函数
print('m的值是{}'.format(m))
print('将m收集到列表中是{}'.format(list(m)))

在这里插入图片描述
示例2,参数是一个字符串

print(list(map(str.upper, 'abcd')))  #将所有字符转成大写
-->['A', 'B', 'C', 'D']

示例3,参数是多个序列,则并行取出每个序列中对应的元素,然后传给函数的参数

aa=list(map(pow,[1,2,3],[2,3,4]))
print(aa)
-->[1, 8, 81],第一次取出序列1的第一个元素1,同时取出序列2的第一个元素2,计算pow(1,2),第二次分别取两个元素的第二个元素,计算pow(2,3),第三次计算pow(3,4)

示例4,第一个参数是lambda

m=map(lambda x:x*3,[2,3,4])
print(list(m))
-->[6, 9, 12]

map函数总结
1、map自身返回的就是迭代器,也就是说它自己是自己的迭代器
2、map是迭代操作,所以它的工作方式是惰性的,按需一次返回一个数据,而不是收集完所有数据后一次性返回
3、所有map操作都能替换成等价的for循环,但map的效率比for要高很多,基本能和解析操作的效率差不多
4、如果map中使用了lambda,则map效率低于列表解析,如果map中没有lambda,则效率要稍高于列表解析,所以能用列表解析就用列表解析

3、filter函数(过滤函数)

filter函数作用:从可迭代对象中筛选出元素被函数操作后True的元素
filter(function or None,iterable) -->filter object,第一个参数是函数或None,第二个参数是可迭代序列,返回一个可迭代对象

1、当第一个参数为None时,表示直接从可迭代对象总取出元素为True的元素

print(list(filter(None, ["a", "", 0, "c"])))
-->['a', 'c']

2、第一个参数是lambda函数,筛选出列表中字符串元素产股大于2的字符串

L=['a','bbb','skfj','dd']
L1=filter((lambda x:len(x)>2),L)
print(L1)
---><filter object at 0x00000176BF043FD0>
    ['bbb', 'skfj']

4、reduce函数(累积函数)

需要先引入 functools.reduce
用法:reduce(func,sequence,initial) -->value,initial为可选参数

reduce过程:
1、如果没有initial参数,先从sequence中取两个元素,作为func的参数,然后返回结果A;然后再从seq中取一个元素,和结果A一起作为func的参数,再返回结果B;重复此过程,直到迭代完seq中所有元素,最终返回一个结果

2、如果有initial参数,则先从sequence中取一个元素,和initial一起作为func的参数,返回结果A;然后再从seq中取一个元素,和结果A一起作为func的参数,然后和没有initial时一样遍历完seq中所有元素,最终返回一个结果

3、如果给定了initial,没有给sequence,则initial作为直接返回的默认值
示例:

from functools import reduce

print(reduce(lambda x,y:x+y,[1,2,3,4,5]))
print(reduce(lambda x,y:x if x>y else y,[3,4,2,8,10]))

5、递归函数

在函数内部,调用自己,就是递归函数
必须有一个明确的结束条件;每次进入更深一层递归时,问题 规模都要有所减少;递归效率不高,如果层次过多会导致栈溢出
–需要做递归练习题,后面需要补充专项总结

6、闭包函数

内层函数运用了外层函数的变量,外层函数的返回值是内层函数的引用,这就构成了一个闭包
返回的是内层函数的引用 需要先调用外层函数(),再加个()相当于执行内层函数
闭包函数常用语实现装饰器(装饰器的本质就是闭包)

def outer(a):  #定义外层函数
	b=10
	def inner():  #定义内层函数
		print(a+b)   #内层函数使用外层函数的变量
	return inner   #返回内层函数的引用


demo=outer(5) #demo存的是外函数的返回值,也就是inner函数的引用
demo()  #这里相当于执行inner函数

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 11:55:12  更:2022-05-19 11:55:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 11:42:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码