当前位置: 首页 > news >正文

13_Python的高阶函数

在这里插入图片描述

高阶函数

高阶函数是Python编程中一个非常强大和有用的特性,它们允许程序员编写更简洁、更抽象的代码。

Python中的高阶函数是那些至少满足以下一个条件的函数:

  1. 接受一个或多个函数作为输入(也就是说,它的参数之一是函数)。
  2. 输出一个函数。

1. map()

map() 函数接收两个参数,一个是函数,一个是可迭代对象,将传入的函数依次作用到可迭代对象的每个元素,并把结果作为新的迭代对象返回。

# 用法:
map(func,iterable)
# 求平方
def square(x):return x ** 2numbers = [1, 2, 3, 4, 5]
# 将列表中的元素都求平方
squared_numbers = map(square, numbers)
print(list(squared_numbers))  # 输出: [1, 4, 9, 16, 25]
# 上面的例子用lambda表达式写
print(list(map(lambda n:n**2,numbers)))

map() 函数返回一个迭代器,而不是一个列表。如果需要将结果转换为列表,可以使用 list() 函数。

2. filter()

filter() 函数用于过滤序列,接收一个函数和一个序列作为输入,返回一个迭代器,该迭代器生成那些函数返回值为True的序列元素。返回值为False的丢弃。

# 用法:
filter(func,iterable)
# 是否偶数
def is_even(x):return x % 2 == 0numbers = [1, 2, 3, 4, 5, 6]
# 过滤出序列中的偶数
even_numbers = filter(is_even, numbers)
print(list(even_numbers))  # 输出: [2, 4, 6]
# 上面的例子用lambda表达式写
print(list(filter(lambda n:n % 2 == 0,numbers)))

3. reduce()

reduce() 函数来自于 functools 模块,它接收一个函数和一个序列作为输入,函数必须接受两个参数,reduce() 将会遍历序列中的元素,并累积结果。

# 用法:
reduce(func,iterable)
from functools import reducedef add(x, y):return x + ynumbers = [1, 2, 3, 4, 5]
sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers)  # 输出: 15
# 上面的例子用lambda表达式写
print(reduce(lambda x, y: x + y, numbers))

4. sorted()

sorted() 函数可以对列表进行排序,它接收一个函数作为参数,可以用来指定排序的依据。

# 用法:
sorted(iterable,key)
pairs = [(3, 'three'), (1, 'one'), (2, 'two'), (-5, 'five'), (4, 'four')]
# 以列表中元组的第二个元素进行排序
pairs_sorted_by_second = sorted(pairs, key=lambda pair: pair[1])
print(pairs_sorted_by_second)  # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
# 以列表中元组的第二个元素降序进行排序
pairs_sorted_by_second_res = sorted(pairs, key=lambda pair: pair[1], reverse=True)
print(pairs_sorted_by_second_res)  # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
# 以列表中元组的第1个元素的绝对值进行排序
pairs_sorted_by_first = sorted(pairs, key=lambda pair: abs(pair[0]))
print(pairs_sorted_by_first)  # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
# 列表嵌套元组的排序
infor = [("Tom",100,95),("Lilei",90,95),("Jim",90,96),("Green",90,83),("John",100,95),("Lucy",100,95)
]def sord_num1(s):return s[1]def sord_num1_num2(s):return s[1],s[2]
# 以元组的第二个元素排序
print(sorted(infor,key=sord_num1))
# 以元组的第二个、第三个元素排序
print(sorted(infor,key=sord_num1_num2))

5. lambda 表达式

lambda 表达式可以创建匿名函数,常用于高阶函数中。

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x**2, numbers)
print(list(squared_numbers))  # 输出: [1, 4, 9, 16, 25]

高阶函数在Python的很多地方都有应用,比如在函数式编程、装饰器、回调函数等高级概念中都非常常见。通过使用高阶函数,可以大大提高代码的灵活性和表达力。

附件

本文对应的jupyter notebook源码链接,欢迎下载练习:https://download.csdn.net/download/fx_yzjy101/89774843

如有问题请留言。

http://www.lryc.cn/news/444495.html

相关文章:

  • 清空当前机器所有Docker容器和镜像
  • FreeRTOS学习——Systick中断、SVC中断、PendSV中断
  • 汇量科技大数据面试题及参考答案
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——14.AVL树
  • Python 的数据类型与操作
  • Python燃烧废气排放推断算法模型
  • Qt中多语言的操作(以QtCreator为例)
  • 计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • html+css学习
  • 2.gitlab ce 细粒度的权限控制
  • G - Merchant Takahashi / F - Useless for LIS
  • 自然语言处理实例
  • 『功能项目』主角属性值显示【75】
  • 单片机嵌入式编程中常用技术点
  • 【毕业论文+源码】基于ASP+NET的人事管理系统
  • 计算机毕业设计 校园志愿者管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读
  • 如何使用VM中win10搭建Hfish蜜罐(危险感知平台)。从下载到部署详细教程
  • Rust: AES 加密算法库
  • 计算机网络34——Windows内存管理
  • Redisson 总结
  • EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(一)
  • 文心智能体搭建步骤
  • PHP安全
  • c++278函数指针
  • sklearn特征选取之SelectFromModel
  • vue一级、二级路由设计
  • python爬虫:将知乎专栏文章转为pdf
  • 嵌入式笔记(入门系列2)
  • 并发编程多线程