百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python 函数式编程——常用高阶函数 及 lambda匿名函数 详解

off999 2024-10-28 16:46 48 浏览 0 评论

函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。


高阶函数(Higher-order function)

我们以一个具体的实例,来理解下是什么是高阶函数。

变量可以指向函数

下面例子,调用sum函数,打印调用sum函数的返回结果,同时打印sum函数,如下:

上面我们将sum(num_list)的结果返回给sum_list,那么,如果把函数本身赋值给变量呢?,如下,将函数sum赋值给变量fun_sum,打印fun_sum变量可以发现fun_sum变量指向了函数sum。


函数可以作为变量传入其他函数

既然变量可以指向函数,那么函数就可以接收作为参数的其他函数,这种函数就称之为高阶函数。如下,是一个简单的高阶函数示例,将sum函数作为变量传给add_list()里的function作为高阶函数传参。然后在add_list()里还调用了function。


Python函数式编程中常用的高阶函数(内建函数)

map()

Python函数式编程中的map()高阶函数,它接收一个函数 function 和一个 list,第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

函数语法

 map(function, iterable, ...)

参数

  • function : 函数
  • iterable : 一个或多个序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例


reduce()

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(列表、元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(这个函数必须接收两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

函数语法

 reduce(function, iterable[, initializer])

参数

  • function -- 函数,有两个参数
  • iterable -- 可迭代对象
  • initializer -- 可选,初始参数

返回

  • 返回函数计算结果。

示例如下,列表元素求乘积:

reduce(f, [x1, x2, x3]) 同等于 function(f(x1, x2), x3)


filter()

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

函数语法

以下是 filter() 方法的语法:

 filter(function, iterable)

参数

  • function -- 判断函数。
  • iterable -- 可迭代对象。

返回

  • 返回列表

示例如下,保留list_o 中偶数:


sorted()

sorted()函数就可以对list进行排序。

函数语法

 sorted(iterable[, cmp[, key[, reverse]]])

参数

  • iterable -- 可迭代对象。
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回

  • 返回重新排序的列表。

sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按square返回值大小排序:


匿名函数 lambda

Python使用lambda关键字创造匿名函数。所谓匿名,即不再使用显式def语句这样标准的形式定义一个函数。这种语句的目的是由于性能的原因,在调用时绕过函数的栈分配。其语法是:

 lambda [arg1[, arg2, ... argN]]: expression

其中,参数是可选的,如果使用参数的话,参数通常也会在表达式之中出现,冒号前面的x表示函数参数,同时匿名函数有个限制,就是只能有一个表达式,不需要写return,返回值就是该表达式的结果。

匿名函数通常被用作高阶函数(Higher-order function:参数为函数的函数)的参数,比如,上述介绍的几个内置高阶函数:map(),reduce(),filter(),对应的Python实现样例如下:

map()函数


reduce()函数


filter()函数


sorted()函数

相关推荐

Python 数据分析——利用Pandas进行分组统计

话说天下大势,分久必合,合久必分。数据分析也是如此,我们经常要对数据进行分组与聚合,以对不同组的数据进行深入解读。本章将介绍如何利用Pandas中的GroupBy操作函数来完成数据的分组、聚合以及统计...

python数据分析:介绍pandas库的数据类型Series和DataFrame

安装pandaspipinstallpandas-ihttps://mirrors.aliyun.com/pypi/simple/使用pandas直接导入即可importpandasas...

使用DataFrame计算两列的总和和最大值_[python]

【如果对您有用,请关注并转发,谢谢~~】最近在处理气象类相关数据的空间计算,在做综合性计算的时候,DataFrame针对每列的统计求和、最大值等较为方便,对某行的两列或多列数据进行求和与最大值等的简便...

8-Python内置函数

Python提供了丰富的内置函数,这些函数可以直接使用而无需导入任何模块。以下是一些常用的内置函数及其示例:1-print()1-1-说明输出指定的信息到控制台。1-2-例子2-len()2-1-说...

Python中函数式编程函数: reduce()函数

Python中的reduce()函数是一个强大的工具,它通过连续地将指定的函数应用于序列(如列表)来对序列(如列表)执行累积操作。它是functools模块的一部分,这意味着您需要在使用它之...

万万没想到,除了香农计划,Python3.11竟还有这么多性能提升

众所周知,Python3.11版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的“香农计划”外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟!作者:BeshrKay...

最全python3.11版12类75个内置函数大全

获取全部内置函数:importbuiltins#导入模块yc=[]#异常属性nc=[]#不可调用fn=[]#内置函数defll(ty=builtins):...

软件测试笔试题

测试工程师岗位,3-5年,10-14k1.我司有一款产品,类似TeamViewer,向日葵,mstsc,QQ远程控制产品,一个PC客户端产品,请设想一下测试要点。并写出2.写出常用的SQL语句8条,l...

备战各大互联网巨头公司招聘会,最全Python面试大全,共300题

前言众所周知,越是顶尖的互联网公司在面试这一part的要求就越高,需要你有很好的技术功底、项目经验、一份漂亮的简历,当然还有避免不了的笔试过关。对于Python的工程师来说,全面掌握好有关Python...

经典 SQL 数据库笔试题及答案整理

马上又是金三银四啦,有蛮多小伙伴在跳槽找工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收录了下最近学员反馈上来的一些数据库笔...

用Python开发日常小软件,让生活与工作更高效!附实例代码

引言:Python如何让生活更轻松?在数字化时代,编程早已不是程序员的专属技能。Python凭借其简洁易学的特点,成为普通人提升效率、解决日常问题的得力工具。无论是自动化重复任务、处理数据,还是开发个...

太牛了!102个Python实战项目被我扒到了!建议收藏!

挖到宝了!整整102个Python实战项目合集,从基础语法到高阶应用全覆盖,附完整源码+数据集,手把手带你从代码小白变身实战大神!这波羊毛不薅真的亏到哭!超全项目库,学练一站式搞定这份资...

Python中的并发编程

1.Python对并发编程的支持多线程:threading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成。多进程:multiprocessing,利用多核CPU...

Python 也有内存泄漏?

1.背景前段时间接手了一个边缘视觉识别的项目,大功能已经开发的差不多了,主要是需要是优化一些性能问题。其中比较突出的内存泄漏的问题,而且不止一处,有些比较有代表性,可以总结一下。为了更好地可视化内存...

python爬虫之多线程threading、多进程、协程aiohttp批量下载图片

一、单线程常规下载常规单线程执行脚本爬取壁纸图片,只爬取一页的图片。importdatetimeimportreimportrequestsfrombs4importBeautifu...

取消回复欢迎 发表评论: