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

news2025/1/16 6:37:14

在这里插入图片描述

系列文章目录

  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**2

ret = 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+b

ret = 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 == x

ret = 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 10
    return n+func1(n+1)
print(func1(1))

# 案例二:用递归函数实现10到1的和
def func2(n):
    if n == 1:
        return 1
    return n+func2(n-1)
print(func2(10))

# 案例三:用递归函数实现10以内偶数的和
def func3(x):
    if x == 10:
        return 10
    else:
        return x + func3(x+2)
print(func3(0))
-------------------------------------
def func3(n):
    if n <= 0:
        return 0
    if 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 ) / 2
        mid = (start + end) // 2
        # 将要查询的数据于中间值进行比较
        # 要查询的数据 = 中间值
        if n == lst[mid]:
            return f"要查询的数据的下标为:{mid}"
        # 要查询的数据 > 中间值    start为mid+1
        elif n > lst[mid]:
            return func(lst,n,mid+1,end)
        # 要查询的数据 < 中间值    end为mid-1
        elif n < lst[mid]:
            return func(lst,n,start,mid-1)
    # 如果查询范围内没有数据了,需要结束递归
    else:
        return "当前列表中没有要查询的数据"
print(func(list1,6300,0,len(list1)-1))


在这里插入图片描述

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

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

相关文章

添加webpack.config.js配置

webpack 命令默认会去根目录查找webpack.config.js配置文件&#xff0c;如果没有&#xff0c;则会使用webpack默认的零配置打包规则进行打包&#xff0c;默认的零配置打包规则主要包括下面这几点&#xff1a; 1. 默认入口文件&#xff1a;Webpack 默认会将 ./src/index.js 作为…

“壕无人性”的沙特也要买量子计算机!巨头沙特阿美的合作方竟是它?

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1200字丨5分钟阅读 摘要&#xff1a;石油巨头沙特阿美与 Pasqal 开启合作&#xff0c;计划于 2025 年部署一台 200 量子比特的量子计算机&#xff…

开源大模型与闭源大模型:技术哲学的较量

目录 前言一、 开源大模型的优势1. 社区支持与合作1.1 全球协作网络1.2 快速迭代与创新1.3 共享最佳实践 2. 透明性与可信赖性2.1 审计与验证2.2 减少偏见与错误2.3 安全性提升 3. 低成本与易访问性3.1 降低研发成本3.2 易于定制化3.3 教育资源丰富 4. 促进标准化5. 推动技术进…

【qt】QDockWidget 浮动窗口

QDockWidget 浮动窗口 一.QDockWidget 的用法 前言&#xff1a;很简单&#xff0c;放心食用 一.QDockWidget 的用法 太简单了&#xff0c;直接来吧&#xff01; 直接做个小项目来了解QDockWidget 的用法 目标效果图&#xff1a; 开始拖放&#xff1a; 开始布局&#xff1a; …

Jenkins pipeline发布前端项目

说明&#xff1a;第一次使用jenkins生成pipeline片段&#xff0c;做个记录... 1.全局工具配置添加自定义node版本 2.系统管理添加前端应用部署服务器 2.1 点击高级选择账号密码验证方式&#xff0c;添加服务器的用户和密码 3.系统管理--凭据--系统--全局凭据--添加自己的git凭据…

R语言数据分析案例-巴西固体燃料排放量预测与分析

1 背景 自18世纪中叶以来&#xff0c;由于快速城市化、人口增长和技术发展&#xff0c;导致一氧化二氮&#xff08;N2O&#xff09;、 甲烷&#xff08;CH4&#xff09;和二氧化碳&#xff08;CO 2&#xff09;等温室气体浓度急剧上升&#xff0c;引发了全球变暖、海平面上 升…

[Cocos Creator 3.5赛车游戏]第5节 为汽车节点挂载自定义脚本

在前面的章节中您已经学会了如何创建一个汽车节点&#xff0c;这一章我们将会学习如何通过挂载自定义节点的方式让小车变得可控制&#xff0c;所以通过这一章的学习后&#xff0c;您将实现一个效果&#xff1a;开始运行后&#xff0c;小车每隔一帧就延y轴向上移动一段距离。在这…

vs无法打开或包括文件”QTxxx“

vs创建项目时默认引入core、gui、和widgets等模块&#xff0c;在需要网络通讯或者图表等开发时需要添加相应模块。 点击扩展 -> QT VS Tools -> QT Project Setting->Qt Modules&#xff0c;添加相应模块即可

OpenAI、微软、智谱AI 等全球 16 家公司共同签署前沿人工智能安全承诺

人工智能&#xff08;AI&#xff09;的安全问题&#xff0c;正以前所未有的关注度在全球范围内被讨论。 日前&#xff0c;OpenAI 联合创始人、首席科学家 Ilya Sutskever 与 OpenAI 超级对齐团队共同领导人 Jan Leike 相继离开 OpenAI&#xff0c;Leike 甚至在 X 发布了一系列…

Java中Spring MVC 来如何接收表单数据

目录 一、Java语言介绍 二、Spring MVC 框架介绍 三、什么是表单 四、Spring MVC 来如何接收表单数据 一、Java语言介绍 Java是一种广泛使用的面向对象的编程语言&#xff0c;由Sun Microsystems公司的James Gosling等人开发。它最初于1995年发布&#xff0c;被设计为具有…

以人为本的人工智能:李飞飞谈AI

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;关于AI的讨论越来越多&#xff0c;特别是围绕其可能带来的威胁。有人担心高效的AI会夺走我们的工作&#xff0c;甚至不可控的AI最终会统治人类。对此&#xff0c;斯坦福大学计算机科学系教授李飞飞提出了不同…

【bug解决】文件chunk分包上传中断报错

文章目录 报错信息原因分析解决方案 一天闲着无聊&#xff0c;打开项目线上报错日志信息&#xff0c;突然发现一段很奇怪的报错&#xff1a;MultipartException&#xff0c;主观认为导致这个问题的原因无非就几个原因&#xff1a; 文件上传格式大小超出限制&#xff0c;在配置文…

Llama 3超级课堂作业笔记

文章目录 基础作业完成 Llama 3 Web Demo 部署环境配置下载模型Web Demo 部署对话截图 使用 XTuner 完成小助手认知微调Web Demo 部署自我认知训练数据集准备训练模型推理验证 使用 LMDeploy 成功部署 Llama 3 模型环境&#xff0c;模型准备LMDeploy CLI chatLMDeploy模型量化(…

访问列表元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;如果想将列表的内容输出也比较简单&#xff0c;可以直接使用print()函数即可。例如&#xff0c;创建一个名称为untitle的列表…

python-docx 在word中指定位置插入图片或表格

docx库add_picture()方法不支持对图片位置的设置 1、新建一个1行3列的表格&#xff0c;在中间的一列中插入图片 from docx import Document from docx.shared import Pt from docx.oxml.shared import OxmlElement from docx.enum.text import WD_ALIGN_PARAGRAPHdef add_cen…

谷歌开源项目BERT源码解读与应用实例

数据及代码见文末 基于BERT的中文情感分析实战:基于BERT的中文情感分析实战-CSDN博客 基于BERT的中文命名实体识别识别实战:基于BERT的中文命名实体识别识别实战-CSDN博客 1.项目配置文件 GLUE/BERT_BASE_DIR是项目的预训练权重,预训练权重主要包含3个部分:参数配置文件…

LangChain - 构建知识图谱提升RAG

本文翻译整理自&#xff1a;Enhancing RAG-based application accuracy by constructing and leveraging knowledge graphs https://blog.langchain.dev/enhancing-rag-based-applications-accuracy-by-constructing-and-leveraging-knowledge-graphs/ code : https://github.c…

在gitlab CICD中 小试 hooks:pre_get_sources_script 功能

参考链接&#xff1a; hooks:pre_get_sources_script 功能简介 hooks:pre_get_sources_script 是gitlab CICD中的一个功能&#xff0c;该功能可以指定在克隆 Git 仓库和任何子模块之前要在执行器上执行的某些命令。例如&#xff1a; 调整 Git 配置导出跟踪变量 下来简单给…

修改默认时区,默认语言,默认国家

确认时区&#xff0c;语言&#xff0c;国家 build/make/target/product/languages_default.mkframeworks/base/packages/SettingsLib/res/xml/timezones.xml设备mk中添加相关内容 PRODUCT_PROPERTY_OVERRIDES \persist.sys.timezoneEurope/AmsterdamPRODUCT_PROPERTY_OVERRI…

Centos7离线安装RabbitMQ教程

目录 安装包准备开始安装1. 创建目录2. 上传文件3. 安装erlang语言4. 安装socat5. 安装rabbitmq6. 启动、停止rabbitmq7. 设置开机启动8. 开启web界面管理工具9. 开启防火墙(root)10. 访问页面11. 附录 安装包准备 &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;…