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

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

前言

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.总结

map:  1.所有的数据都要   
    2.对所有的数据都进行相同的操作  
     3.返回的结果是一个迭代器对象
reduce:1.对数据进行累积操作(累加,累乘)  
     2.返回的结果是一个具体的值  
      3.使用需要导包
filter:1. 不是所有的数都要,仅保留满足条件的数据  
     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))
相关文章
|
23天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
125 67
|
17天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
42 18
|
8天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
40 8
|
18天前
|
Python
Python中的函数
Python中的函数
31 8
|
25天前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####
|
1月前
|
Python
Python中的`range`函数与负增长
在Python中,`range`函数用于生成整数序列,支持正向和负向增长。本文详细介绍了如何使用`range`生成负增长的整数序列,并提供了多个实际应用示例,如反向遍历列表、生成倒计时和计算递减等差数列的和。通过这些示例,读者可以更好地掌握`range`函数的使用方法。
47 5
|
1月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
7月前
|
算法 Python 容器
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
96 0
|
3月前
|
算法 Python
Python编程的函数—内置函数
Python编程的函数—内置函数
22 0
|
7月前
|
算法 Python
Python编程实验四:函数的使用
Python编程实验四:函数的使用
109 0