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


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sheng的学习笔记-docker部署Greenplum

目录 docker安装gp数据库 mac版本 搭建gp数据库 连接数据库 windows版本 搭建gp数据库 连接数据库 docker安装gp数据库 mac版本 搭建gp数据库 打开终端&#xff0c;输入代码&#xff0c;查看版本 ocker search greenplum docker pull projectairws/greenplum docker…

大模型618提前开战,永久免费意味着什么?

万万没想到&#xff0c;当我们在说经过上一年的百模大战&#xff0c;2024 年将成为大模型应用落地的关键一年&#xff0c;不承想&#xff0c;AI 大模型价格战疯狂席卷而来。 这场战役始于巨头。字节、阿里、百度、科大讯飞、腾讯先后官宣降价或免费&#xff0c;价格战所带来的…

风控指南:国内车险欺诈呈现四大趋势

目录 车险欺诈呈现内外勾结的团伙化 防范车险欺诈需要多重合作 保险企业需要提升反欺诈能力 监管部门需要加强协同合作 2024年4月11日&#xff0c;国家金融监督管理总局官网发布国家金融监督管理总局关于《反保险欺诈工作办法&#xff08;征求意见稿&#xff09;》公开征求意见…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-16讲 EPIT定时器

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Lumines推出RGBL彩色混合LED

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

【OpenGL实践10】关于几何着色器

目录 一、说明 二、几何着色器 2.1 设置 2.2 基本几何着色器 2.2.1 输入类型 2.2.2 输出类型 2.2.3 顶点输入 2.2.4 顶点输出 2.3 创建几何着色器 2.4 几何着色器和顶点属性 三、动态生成几何体 四、结论 练习 一、说明 几何着色器的应用比较高级&#xff0c;关于…

Postman使用技巧

Postman是一款广泛使用的API开发和测试工具&#xff0c;专为简化Web服务API的开发、测试、文档编制和协作过程而设计。它支持各种HTTP请求方法&#xff0c;包括GET、POST、PUT、DELETE等&#xff0c;允许用户轻松地构建和发送请求&#xff0c;以及检查响应。 本文介绍几个提升效…

Linux信号:信号的概念及意义

目录 一、什么是信号 kill-l查看信号 二、信号的产生 2.1系统调用 kill raise abort 2.2软件条件 13)SIGPIPE pipe信号 14&#xff09;SIGAKARM alarm信号 2.2硬件中断 2.3异常 8)SIGFPE 除0异常 11)SIGSEGV 野指针 2.4信号处理的常见方式 三、Core Dump和term…

docker如何拉取redis最新镜像并运行

要拉取Docker Hub上最新版本的Redis镜像&#xff0c;您可以使用以下命令&#xff1a; docker pull redis:latest 这里的latest标签会自动获取Redis镜像的最新版本。如果您希望指定一个确切的版本号&#xff0c;可以直接使用该版本号替换latest。例如&#xff0c;要拉取Redis版…

Python | Leetcode Python题解之第108题将有序数组转换为二叉搜索树

题目&#xff1a; 题解&#xff1a; class Solution:def sortedArrayToBST(self, nums: List[int]) -> TreeNode:def helper(left, right):if left > right:return None# 选择任意一个中间位置数字作为根节点mid (left right randint(0, 1)) // 2root TreeNode(nums…

计算机网络数据链路层知识点总结

3.1 数据链路层功能概述 &#xff08;1&#xff09;知识总览 &#xff08;2&#xff09;数据链路层的研究思想 &#xff08;3&#xff09;数据链路层基本概念 &#xff08;4&#xff09;数据链路层基本功能 3.1 封装成帧和透明传输 &#xff08;1&#xff09;数据链路层功能…

上海亚商投顾:三大指数均跌超1.3%,全市场下跌个股超4600只

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整&#xff0c;三大股指均跌超1.3%。PEEK概念股逆势大涨&#xff0c;肯特股份、沃特股份涨停&a…

[STM32-HAL库]AS608-指纹识别模块-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、详细步骤 1.光学指纹模块 2.配置STM32CUBEMX 3.程序设计 3.1 输出重定向 3.2 导入AS608库 3.3 更改端口宏定义 3.4 添加中断处理部分 3.5 初始化AS608 3.6 函数总览 3.7 录入指纹 3.8 验证指纹 3.9 删除指纹 3.10 清空指纹库 三、总结及资源 一、前言 …

AI赋能 企业智能化应用实践

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言云定价优化语音助手与聊天机器人预测性维护客服运营自动化低功耗微处理器神…

无线网络安全技术基础

无线网络安全技术基础 无线网络安全风险和隐患 随着无线网络技术广泛应用,其安全性越来越引起关注.无线网络的安全主要有访问控制和数据加密,访问控制保证机密数据只能由授权用户访问,而数据加密则要求发送的数据只能被授权用户所接受和使用。 无线网络在数据传输时以微波进…

微软MSBuild大会发布Copilot+PC:技术革新还是隐私噩梦?

微软在最近的MSBuild 2024大会上发布了全新的CopilotPC概念&#xff0c;这一技术结合了高通骁龙X Elite芯片&#xff0c;将人工智能与PC紧密结合。此次发布引起了广泛关注&#xff0c;不仅是因为其技术创新&#xff0c;还因为潜在的隐私问题。甚至连Elon Musk也对此表示担忧&am…

Nginx企业级负载均衡:技术详解系列(11)—— 实战一机多站部署技巧

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。 工作中你是否遇到过这种情况&#xff1a;公司业务拓展&#xff0c;新增一个域名&#xff0c;但服务器资源有限&#xff0c;只能跟原有的网站共用同一台Nginx服务器。 也就是说两个网站的域名都指向同一台Nginx服务器…

WPF中DataGrid实现多选框功能

1. 效果图 2. Model建立 public class RstModelCheck : ObservableObject {//为了显示Head1和Head2.而且View中绑定属性而非字段&#xff0c;否则不能显示。public string? Name { get; set; } public bool PlatenAll {get > _platenAll;set{SetProperty(ref _platenAl…

MoonDream2微调指南【最小VLM】

在本指南中&#xff0c;我们将探讨如何使用计算机视觉数据集对完全开源的小型视觉语言模型 Moondream2 进行微调&#xff0c;以计数项目&#xff08;这是 GPT-4V 一直表现不一致的任务&#xff09;&#xff0c;并以一种可以依赖输出用于生产应用程序的方式进行微调。 视觉语言…

电力巡检穿戴式智能手环:让巡检不孤立无援

电力巡检穿戴式智能手环:让巡检不孤立无援 在电力巡检的广袤天地里中&#xff0c;电力工作人员他们身着工装&#xff0c;头戴安全帽&#xff0c;手持仪器&#xff0c;穿梭在高压线路与铁塔之间。他们的健康状态&#xff0c;直接关系到电力作业的安全与效率。如今&#xff0c;电…