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

08 函数式编程

文章目录

  • 1 高阶函数
    • 1.1 map()
    • 1.2 reduce()
    • 1.3 filter()
    • 1.4 sorted()
  • 2 匿名函数
  • 3 闭包和装饰器
  • 4 偏函数

1 高阶函数

Python 中的函数是“一等函数”,所谓“一等函数”指的就是函数可以赋值给变量,函数可以作为函数的参数,函数也可以作为函数的返回值。把一个函数作为其他函数的参数或返回值的用法,我们通常称之为“高阶函数”。

在Python中,func()是函数调用,func是函数本身,可以把函数本身赋值给变量,也就是:变量指向函数

print(abs(-1))  # 1
print(abs)  # <built-in function abs>f = abs  # f指向了abs函数
print(f(-5))  # 5  现在f等价于abs

其实函数名本身也是变量,函数名指向函数。
Pasted-image-20250911095842febb35148e3509e3.png


函数能接收变量,变量可以指向函数,所以函数可以接受函数,这时传递的不是数据,而是计算逻辑

def func(compute, x, y):  print(compute(x, y))  def add(x, y):  return x + y  func(add, 5, 10)  

1.1 map()

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

def f(x):return x * x# 将f作用到列表中的每一个元素
r = map(f, [1, 2, 3, 4, 5, 6])
print(list(r))

上述代码中,由于map()返回的是一个惰性序列Iterator,所以通过list()把整个序列算出来返回一个list

输入一行数据作为列表:

ls = list(map(int, input().split(' ')))

1.2 reduce()

reduce()把一个函数作用到一个序列中,其中这个函数必须接收两个参数reduce()将计算结果继续和下一个元素累计计算。
使用reduce()需要导入from functools import reduce

from functools import reduce
def add(x, y):return x + yprint(reduce(add, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))  # 累加求和 55# 使用lambda匿名函数
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))

1.3 filter()

filter接收一个函数一个序列,把传入的函数作用到每一个元素上,根据返回值决定是否保留,True保留元素,False丢弃元素。最终结果作为Iterator返回,也就是一个惰性序列,需要使用list()获取所有计算结果。

def f(x):return x % 2 == 0# 求出0~100的所有偶数
ls = list(filter(f, [i for i in range(101)]))ls = list(filter(lambda x: x % 2 == 0, [i for i in range(101)]))

1.4 sorted()

sorted()可以对序列进行排序,返回一个新的列表。

ls = sorted([4, 3, 2, 5, 1])

还可以接收一个key函数实现自定义排序,key将指定函数作用到序列的每一个值上,并按照返回值进行排序。另外还可以使用reverse=True表示逆序排列。

def f(x):return x[1]ls = [('bob', 70), ('alice', 80), ('carl', 100)]# 按照第二个元素分数进行排序
ls = sorted(ls, key=f)# 使用lambda并且逆序排列
ls = sorted(ls, key=lambda x: x[1], reverse=True)

2 匿名函数

  • def 关键字,可以定义带有名称的函数
  • lambda 关键字,可以定义匿名函数(无名称)

有名称的函数,可以基于名称重复使用。无名称的匿名函数,只可临时使用一次。
表达式内容自动成为返回值,不可使用return

lambda 传入参数: 函数体(一行代码)

实例:

def func(compute, x, y):  print(compute(x, y))  # 传入一个一次性的函数
func(lambda x, y: x * y, 10, 5)

3 闭包和装饰器

4 偏函数

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。
偏函数可以固定函数的某些参数,生成一个新的函数,在调用时可以减少重复参数的输入,降低调用难度。

# int()默认将字符串按照10进制进行转换,可以通过base设置进制
int('152', base=8)# 固定base参数
def int2(x, base=2):return int(x, base)# functools.partial可以很方便地构造偏函数
int2 = functools.partial(int, base=2)

文章转载自:

http://2Jsv2Ybh.cfwqL.cn
http://9eBwOZEI.cfwqL.cn
http://3uYLJhWN.cfwqL.cn
http://ih06EkOc.cfwqL.cn
http://6iIKJHVb.cfwqL.cn
http://yqSEBNLT.cfwqL.cn
http://6hXflD1a.cfwqL.cn
http://fLBAR0Mt.cfwqL.cn
http://RvaGVkyv.cfwqL.cn
http://HuDufg5F.cfwqL.cn
http://2O90bq95.cfwqL.cn
http://H9GQtvFv.cfwqL.cn
http://cduK50Nb.cfwqL.cn
http://UqpahJpH.cfwqL.cn
http://5A7eyJgQ.cfwqL.cn
http://O9XvV4nT.cfwqL.cn
http://pBTUjm6L.cfwqL.cn
http://ws255rAA.cfwqL.cn
http://IC5WhGtl.cfwqL.cn
http://3u5GOkh7.cfwqL.cn
http://89tmJXuq.cfwqL.cn
http://88SW3Uai.cfwqL.cn
http://IR7PBCjf.cfwqL.cn
http://hW67drbo.cfwqL.cn
http://kklxGfk6.cfwqL.cn
http://FZru2tya.cfwqL.cn
http://q7YHNFzB.cfwqL.cn
http://VbFnzxR0.cfwqL.cn
http://T38OEsc9.cfwqL.cn
http://2jedS0n2.cfwqL.cn
http://www.dtcms.com/a/382710.html

相关文章:

  • 安卓 Google Maps 的使用和开发步骤
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十三章知识点问答(15题)
  • 深入理解 Spring @Async 注解:原理、实现与实践
  • 【Qt开发】显示类控件(三)-> QProgressBar
  • 《Linux——gflags》
  • leetcode35.搜索插入位置
  • Java调用UniHttp接口请求失败?一次开源的深入实践-百度SN签名认证场景下参数乱序问题的三种解决策略
  • MongoDB 监控
  • 【Linux】system V共享内存
  • --- 统一请求入口 Gateway ---
  • 豆包Seedream 4.0多图融合实力派:田园犬+三花猫多场景创作,AI绘画新时代来了!
  • 贪心算法应用:数据包调度问题详解
  • html基本知识
  • 视觉SLAM第10讲:后端2(滑动窗口与位子图优化)
  • Modbus协议原理与Go语言实现详解
  • 模型部署|将自己训练的yolov8模型在rk3568上部署
  • Vue中的slot标签——插槽
  • k8s集群—node节点的删除与添加
  • k8s的dashboard
  • k8s-容器探针和生命周期回调学习
  • 跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
  • 大数据毕业设计选题推荐-基于大数据的结核病数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 全网首发! Nvidia Jetson Thor 128GB DK 刷机与测评(三)常用功能测评 DeepAnything 系列
  • Python快速入门专业版(二十六):Python函数基础:定义、调用与返回值(Hello函数案例)
  • 【系列文章】Linux中的并发与竞争[03]-自旋锁
  • Web前端面试题(1)
  • 海盗王客户端BMP纹理图片解密
  • FreeRTOS 知识点
  • Mac电脑上如何打印出字体图标
  • 2.2顺序表