Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解

在这里插入图片描述

系列文章目录

  1. Python数据类型:编程新手的必修课
  2. 深入探索Python字符串:技巧、方法与实战
  3. Python 函数基础详解
  4. Python正则表达式详解:掌握文本匹配的魔法
  5. Python文件操作宝典:一步步教你玩转文件读写
  6. Python面向对象基础与魔法方法详解
  7. Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
  8. Python进阶之旅:深入理解变量作用域、垃圾回收、拷贝机制与异常处理
  9. Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
  10. 从零开始学迭代器生成器:打造高效、易读的Python代码
  11. Python进阶:深入剖析闭包与装饰器的应用与技巧

文章目录

  • 系列文章目录
  • 前言
  • 一、匿名函数
  • 二、四大高阶函数
    • 1.概念
    • 2.map
    • 3.reduce
    • 4.filter
    • 5.sorted
    • 6.总结
  • 三、枚举函数
  • 四、拉链函数
  • 五、递归函数
    • 简单案例
    • 二分查找算法


前言

Python函数进阶涵盖四大高阶函数(map、reduce、filter、sorted)、匿名函数、枚举、拉链及递归。本博客将深入解析这些高级特性,助你提升代码效率与可读性。从序列处理到递归算法,一同探索Python函数的进阶奥秘。


一、匿名函数

语法

def 函数名(形参):代码块
函数名(实参)# 变量-->函数对象
变量 = lambda 形参:表达式
变量名(实参)

分类

# f = lambda 形参:表达式# 1.无参数无返回值的函数
def func1():print("这是无参数无返回值的def函数")
func1()f1 = lambda :print("这是无参数无返回值的lambda函数")
f1()# 2.有参数无返回值的函数
def func2(a):print(f"这是有参数无返回值的def函数,参数为:{a}")
func2(10)f2 = lambda a,b:print(f"这是有参数无返回值的lambda函数,参数为:{a+b}")
f2(20,30)# 3.无参数有返回值的函数
def func3():return "这是无参数有返回值的def函数"
print(func3())f3 = lambda :"这是无参数有返回值的lambda函数"
print(f3())# 4.有参数有返回值的函数
def func4(a):return f"这是有参数有返回值的def函数。参数为:{a}"
print(func4(5))f4 = lambda a:f"这是有参数有返回值的lambda函数。参数为:{a}"
print(f4(3))

二、四大高阶函数

1.概念

高阶函数:将另外一个函数作为参数使用
作为参数的函数一定要有返回值

2.map

代码如下(示例):

# map
# 语法:map(函数,可迭代对象)
# 作用:将函数依次作用于可迭代对象中的每一个数据;返回的结果是一个迭代器对象# 案例一:将所有的数据取平方值存放在一个新的列表中返回
list1 = [1,2,3,4,5]def func1(x):return x**2ret = map(func1,list1)
print(list(ret))

3.reduce


# reduce高阶函数比较特殊,使用需要导包
from functools import reduce# reduce
# 语法:reduce(函数,可迭代对象)
# 作用:对可迭代对象中的数据进行累计操作
# 		返回一个值
# 案例一:利用高阶函数实现对可迭代对象中的数据进行求和
list1 = [11,12,13,14,15]def func1(a,b):return a+bret = reduce(func1,list1)
print(ret)# 第一次:a=11   b=12    23
# 第二次:a=23   b=13    36
# 第三次:a=36   b=14    50
# 第四次:a=50   b=15    65

4.filter

# filter
# 语法:filter(函数,可迭代对象)
# 作用:通过函数对可迭代对象中的数据依次进行过滤,保留满足条件的数据;返回的结果是一个迭代器对象# 案例一:100-999之间的水仙花数
list1 = [i for i in range(100,1000)]def func1(x):return int(str(x)[0]) ** 3 + int(str(x)[1]) ** 3 + int(str(x)[2]) ** 3 == xret = filter(func1,list1)
print(list(ret))

5.sorted


# abs()
# 语法:abs(数字)
# 作用:获取当前数字的绝对值
num = -10
print(abs(num))   # 10# sort()
# 语法:列表.sort(key排序规则,reverse降序)
# 作用:按照指定的排序规则对列表中的数据进行升降序排序;不指定任何参数时,列表升序排序;指定reverse=True实现降序排序
list1 = [78,60,-34,51,0,-14]
def func1(x):return abs(x)
list1.sort(reverse=True,key=func1)
print(list1)# sorted
# 语法:sorted(可迭代对象,key排序规则,reverse降序)
# 作用:将可迭代对象按照指定的排序规则进行升降序排序
list1 = [78,60,-34,51,0,-14]
def func1(x):return abs(x)
ret = sorted(list1,reverse=True,key=func1)
print(ret)

6.总结


map1.所有的数据都要   2.对所有的数据都进行相同的操作  3.返回的结果是一个迭代器对象
reduce1.对数据进行累积操作(累加,累乘)  2.返回的结果是一个具体的值  3.使用需要导包
filter1. 不是所有的数都要,仅保留满足条件的数据  2.返回的结果时一个迭代器对象
sorted:排序

三、枚举函数

# 枚举函数
# enumerate()
# 语法:enumerate(可迭代对象,start)
# 作用:获取可迭代对象中的数据及对应的序号;序号默认从0开始,充当下标;通过start参数执行序号的起始值list1 = ["hello","你好","玛卡巴卡"]ret1 = enumerate(list1,start=100)for i,j in ret1:print(i)

四、拉链函数

# 拉链函数
# zip
# 语法:zip()
# 作用:从多个可迭代对象中按照顺序取对应的数据,组合成一个个小元组;返回的结果是一个zip对象list1 = ["张三","李四","王五","赵六"]
list2 = ["喜羊羊","美羊羊","懒羊羊"]ret = zip(list1,list2)for i in ret:print(i)

五、递归函数

简单案例

# 递归函数
# 本质:自己调用自己# 编写递归函数
# 1.在定义和调用函数时传递起始值
# 2.大范围的判断(何时结束递归)
# 3.实现本质:自己调用自己(参数发生变化)# 案例一:用递归函数实现1到10的和
def func1(n):if n == 10:return 10return n+func1(n+1)
print(func1(1))# 案例二:用递归函数实现10到1的和
def func2(n):if n == 1:return 1return n+func2(n-1)
print(func2(10))# 案例三:用递归函数实现10以内偶数的和
def func3(x):if x == 10:return 10else:return x + func3(x+2)
print(func3(0))
-------------------------------------
def func3(n):if n <= 0:return 0if n % 2 == 0:return n + func3(n-1)else:return func3(n-1)print(func3(10))

二分查找算法

# 递归函数实现二分查找算法
# 1.在定义和调用函数时传递起始值
# 2.大范围判断(结束递归)
# 3.实现自己调用自己(参数发生变化)# 递归实现获取指定数据的下标
# 列表数据:1.数量没有要求   2.数字的大小   3.数据必须有规律的排放
list1 = [5,13,26,45,63,79,81,96,102,304,706,958,1200]
# lst:指定要从这个列表中查询数据-->列表不会发生变化
# n:要查询的数据-->数据不会发生变化
# start:查询范围的起始值的下标
# end:查询范围的结束值的下标
def func(lst,n,start,end):# 查询范围内有数据:结束下标大于等于开始下标if end >= start:# 查询中间值下标   mid = (start + end ) / 2mid = (start + end) // 2# 将要查询的数据于中间值进行比较# 要查询的数据 = 中间值if n == lst[mid]:return f"要查询的数据的下标为:{mid}"# 要查询的数据 > 中间值    start为mid+1elif n > lst[mid]:return func(lst,n,mid+1,end)# 要查询的数据 < 中间值    end为mid-1elif n < lst[mid]:return func(lst,n,start,mid-1)# 如果查询范围内没有数据了,需要结束递归else:return "当前列表中没有要查询的数据"
print(func(list1,6300,0,len(list1)-1))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

databricks~Unity Catalog

Unity Catalog hierarchy 包含了用户授权管理信息和元数据信息 workspace with unity catalog hierarchy unity metastore Ref: https://www.youtube.com/playlist?listPLY-V_O-O7h4fwcHcXgkR_zTLvddvE_GfC

ChatGPT类大模型应用入门了解与使用

一 前言 ChatGPT大众热情逐渐褪去&#xff0c;但在后台技术人的探索还处于热火朝天状态。如果我们生活的世界是一杯清水&#xff0c; 那类似ChatGPT的语言大模型技术的横空出世就如滴入水杯的一滴墨汁&#xff0c;第一滴很显眼&#xff0c;但实际上是后续墨汁慢慢扩散渗透才是…

Windows11下使用Qt5.14.2编译QtXlsx驱动详细步骤

原有&#xff1a;由于系统需要将QTableWidget表格中的数据导出、在Windows下最开始使用Excel.Application组件实现了导出功能&#xff0c;后面将代码转换到Ubuntu20.04下进行编译&#xff0c;发现项目.pro文件中的QT axcontainer和代码.h文件中的#include <QAxObject>跟…

基于图鸟UI的资讯名片模版开发与应用

一、引言 在前端技术日新月异的今天&#xff0c;快速、高效、美观的UI组件库和模板成为了开发者们关注的焦点。图鸟UI作为一款集成了基础布局元素、配色体系、图标icon和精选组件的UI框架&#xff0c;为前端开发者提供了极大的便利。本文将以图鸟UI为基础&#xff0c;探讨基于…

如何让外网访问内网服务?

随着互联网的快速发展&#xff0c;越来越多的企业和个人需要将内网服务暴露给外网用户访问。由于安全和隐私等因素的考虑&#xff0c;直接将内网服务暴露在外网是非常不安全的做法。如何让外网用户安全访问内网服务成为了一个重要的问题。 在这个问题上&#xff0c;天联公司提供…

Lumines推出RGBL彩色混合LED

Luminus Devices倾心打造了一款崭新的4合1 RGBL&#xff08;红绿蓝绿石灰&#xff09;LED系列&#xff0c;专为舞台与建筑照明领域量身打造&#xff0c;满足对高显色指数&#xff08;CRI&#xff09;与高输出颜色混合的苛刻需求。这一创新之举&#xff0c;无疑是照明技术的一次…

使用HiBurn烧录鸿蒙.bin文件到Hi3861开发板

鸿蒙官方文档的“Hi3861开发板第一个示例程序”中描述了——如何使用DevEco Device Tool工具烧录二进制文件到Hi3861开发板&#xff1b; 本文将介绍如何使用HiBurn工具烧录鸿蒙的.bin文件到Hi3861开发板。 获取HiBurn工具 通过鸿蒙官方文档我们知道DevEco Device Tool是一个V…

SAP--ABAP踩坑日志---日期函数的踩坑-----FIMA_DATE_CREATE

当你需要动态生成日期列的时候,出现了奇怪的BUG怎么办? 用函数循环循环产生获取下一个日期,结果出现了5.30 直接到6.1了 …我的5.31呢??? 解决方案:用这个,不要瞎用函数啊! day_col day_col 1.

docker所在磁盘空间不足 迁移数据

1.查看原始目录docker info | grep "Docker Root Dir" 一般在/var/lib/docker 2.停止docker service docekr stop 3.移动数据 注意 移动前不要创建docker目录&#xff01; mv /var/lib/docker /home/docker 4.进入目录查看是否与原始目录相同&#xff0c;确认一…

表现层框架设计之表现层设计模式_2.MVP模式

1.MVP模式 MVP&#xff08;Model-View-Presenter&#xff09;模式提供数据&#xff0c;View负责显示&#xff0c;Controller/Presenter负责逻辑的处理。MVP是从经典的模式MVC演变而来&#xff0c;它们的基本思想有相通的地方&#xff1a;Controller/Presenter负责逻辑的处理&am…

rtemis 包:多种机器学习算法集成!兼顾数据处理与可视化美图

rtemis 是一个集机器学习与可视化于一体的 R 包&#xff0c;用于各种高级机器学习研究和应用。整体而言&#xff0c;该软件有三个目标&#xff1a; 「应用数据科学」&#xff1a;使高级数据分析高效且易于使用 「机器学习研究」&#xff1a;提供一个平台以开发和测试新颖的机器…

谷歌B端独立站建站推广,外贸建站训练营,傻瓜式教学

做外贸方法重要&#xff0c;工具更重要&#xff0c;而这些背后的规则和套路&#xff0c;身边的人往往不会告诉你&#xff0c;成功的人更不会教给你。本套课程主要内容包括&#xff1a;一套体系化的独立站建站方法&#xff0c;学会“高效学习”避免无效努力&#xff0c;拥有独立…

不闭合三维TSP:蛇优化算法SO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代码

旅行商从城市1出发&#xff0c;终点城市由算法求解而定 部分代码 close all clear clc global data load(data.txt)%导入TSP数据集 Dimsize(data,1)-1;%维度 lb-100;%下界 ub100;%上界 fobjFun;%计算总距离 SearchAgents_no100; % 种群大小&#xff08;可以修改&#xff09; …

k8s node NotReady后会发生什么?

K8s 是一种强大的容器编排和管理平台&#xff0c;能够高效地调度、管理和监控容器化应用程序&#xff1b;其本身使用声明式语义管理着集群内所有资源模型、应用程序、存储、网络等多种资源&#xff0c;Node 本身又属于 K8s 计算资源&#xff0c;上面承载运行着各种类型的应用程…

新零售数据中台:构建零售业高效率、智能化的数据处理平台_光点科技

随着互联网技术的快速发展和移动支付、大数据等技术的广泛应用&#xff0c;零售行业已经逐渐从传统零售向新零售模式转变。在这个变革的时代背景下&#xff0c;新零售数据中台应运而生&#xff0c;它作为零售行业数据资源的整合与智能分析的核心载体&#xff0c;成为推动零售行…

10最佳iPhone数据恢复软件评论

您还在寻找最好的iPhone数据恢复软件吗&#xff1f; 似乎我们在iPhone上放置了越来越多与日常生活和工作有关的重要事情。照片可以保持珍贵的时刻&#xff0c;联系人可以保持联系&#xff0c;录音&#xff0c;备忘录和日历可以作为提醒&#xff0c;视频和歌曲可以娱乐&#xf…

xml篇---提取VOC格式的坐标,并按照cameraID进行排序(二)

xml篇—提取VOC格式的坐标&#xff0c;并按照cameraID进行排序&#xff08;二&#xff09; import os import xml.etree.ElementTree as ETdef parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot()objects {}for obj in root.findall(object):name obj.find(…

【DevOps】深入浅出:Jenkins 性能监控全解析

目录 一、监控指标&#xff1a;把握系统健康状况 1、资源利用率&#xff1a; 2、 任务执行效率&#xff1a; 3、系统稳定性&#xff1a; 二、监控工具&#xff1a;选择合适的利器 1、Jenkins 内置监控 1.1、Jenkins Performance Plugin&#xff1a;系统性能指标的直观展…

Android Webview加载pdf文件无法缩放问题

WebView设置开启页面缩放&#xff1a; settings webView.getSettings(); settings.setSupportZoom(true); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setBuiltInZoomControls(true); sett…

CDN管理平台安装说明

CDN管理平台安装说明 系统需求 操作系统&#xff1a;Linux CPU不少于1核心 可用内存不少于1G 可用硬盘空间不小于10G 对于每日千万访问以上的CDN系统推荐配置如下&#xff1a; CPU不少于8核心 可用内存不少于8G 可用硬盘空间不小于200G 准备工作 在安装GoEdge之前&#xff0…