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

高阶函数(Higher-Order Function)

Python 中的高阶函数(Higher-Order Function)是一个至少满足下列一个条件的函数:

接受一个或多个函数作为输入。
输出一个函数。
高阶函数在 Python 中非常强大和灵活,它们允许你将函数作为参数传递给其他函数,或者从函数中返回函数。这种特性使得代码更加模块化和可重用。下面是一些常见的高阶函数例子:

1. map()
map() 函数接受一个函数和一个可迭代对象(如列表或元组)作为输入,将传入的函数依次作用到序列的每个元素上,并返回一个新的迭代器。

python
def square(x):  
    return x * x  
  
numbers = [1, 2, 3, 4, 5]  
squared = list(map(square, numbers))  
print(squared)  # 输出: [1, 4, 9, 16, 25]
2. filter()
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新迭代器。

python
def is_even(n):  
    return n % 2 == 0  
  
numbers = [1, 2, 3, 4, 5, 6]  
even_numbers = list(filter(is_even, numbers))  
print(even_numbers)  # 输出: [2, 4, 6]
3. reduce()
reduce() 函数会对参数序列中元素进行累积。函数将一个两元操作函数作用在序列[x1, x2, x3, ...]上,并将其结果并为一个单一返回值,例如用于求和或求积。注意,reduce() 在 Python 3 中被移出了内建函数,但可以通过 functools 模块来访问。

python
from functools import reduce  
  
def add(x, y):  
    return x + y  
  
numbers = [1, 2, 3, 4, 5]  
sum_of_numbers = reduce(add, numbers)  
print(sum_of_numbers)  # 输出: 15
4. lambda 表达式
虽然 lambda 表达式本身不是一个高阶函数,但它经常与高阶函数一起使用,提供简洁的函数定义。lambda 函数是一个可以接收任何数量的参数但只能有一个表达式的函数。

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

自定义高阶函数


def applyTwice(func, value):  
    """接受一个函数和一个值,返回该函数两次作用于该值的结果"""  
    return func(func(value))  
  
def addTen(x):  
    """将 10 加到 x 上"""  
    return x + 10  
  
print(applyTwice(addTen, 5))

仿制map函数


#仿写map函数
def WxpMap(f,lista):
    "f为变化函数,lista为列表"
    listE=[]    
    for i in range(len(lista)):
        listE.append(f(lista[i]))
    return listE

listD=[1,2,3,4,5,6]
listE=WxpMap(lambda x:x**2,listD)
print(listE)

仿制reduce函数(用什么来存储结果呢?)


#仿写reduce函数
def WxpReduce(f,lista):
    "f为变化函数,lista为列表"
    #加法的时候,设置result=0;乘法的时候设置result=1;(其他运算怎么办?)
    result=0
    for i in lista:
        result=f(result,i)
    return result

listD=[1,2,3,4,5,6]
#求平方和
result=WxpReduce(lambda x,y:x+y**2,listD)
print(result)


http://www.kler.cn/a/318820.html

相关文章:

  • LeetCode【0031】下一个排列
  • 多叉树笔记
  • IEC60870-5-104 协议源码架构详细分析
  • rockylinux 8安装 gcc11.2
  • 【CSS】“flex: 1“有什么用?
  • ISAAC SIM踩坑记录--ubuntu 22.04操作系统安装
  • 高侧电流检测电路设计
  • [新闻]Tom Sawyer Software宣布发布SysML v2 Viewer
  • GLM-4-9B 是智谱 AI 推出的预训练模型 GLM-4 系列中的开源版本
  • Pytest-allure如何在测试完成后自动生成完整报告?
  • 占领矩阵-第15届蓝桥省赛Scratch中级组真题第5题
  • 桥梁轻量化结构监测系统解决方案
  • [OPEN SQL] SELECT语句
  • Android JNI 调用流程
  • 深入理解主键回显:提升数据操作效率与准确性
  • 目标检测系列(一)什么是目标检测
  • OpenMV与STM32通信
  • 稳了,搭建Docker国内源图文教程
  • Mysql梳理10——使用SQL99实现7中JOIN操作
  • C++ 面试模拟02
  • 2024 年最新 Protobuf 结构化数据序列化和反序列化详细教程
  • React Native 在 build 的时候如果出现 `babel.config.js` 配置文件的错误
  • 音频北斗定位系统有什么用?
  • C++入门编程题(力扣):字符串中最多数目的子序列
  • EasyExcel日常使用总结
  • 【C语言】使用 OpenSSL 进行 AES CBC 加密与解密