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

Python之函数式编程:纯函数与lambda表达式

off999 2024-10-23 12:40 52 浏览 0 评论

引言

今天聊点简单的,也就是“纯函数”。任何一个函数只要满足纯函数的两个特性,就是纯函数。纯函数与lambda表达式,其实没有必然的联系。只是由于lmbada表达式比较简洁,很多时候可以作为纯函数的一种实现方式。

本文的主要内容有:

1、什么是纯函数

2、纯函数的好处

3、纯函数的使用与lambda表达式


什么是纯函数

纯函数(Pure Function)是指在相同的输入下总是返回相同的输出的函数,并且没有任何可观察到的副作用。其实,纯函数的定义中,就包含了纯函数的两个特性:

1、幂等性:也叫确定性,就是给定相同的输入参数,函数总是返回相同的结果。

2、无副作用:函数不以任何方式改变外部状态,也不依赖任何可变的外部状态。外部状态,可以理解为在函数体之外的状态,比如全局变量、硬盘文件、用户输入等,闭包中需要通过nonlocal关键字声明的自由变量,严格说来,也属于外部状态。

虽然纯函数的特性看起来有些复杂,但是,要定义一个纯函数还是比较简单的,比如,我们一直演示的两数相加的函数定义:

add()函数就是一个纯函数。

我们可以更进一步扩展,虽然不是很准确,但是纯函数从形式上看,应该包括:

1、函数必须有参数。

2、函数必须有返回值。

基于这两个从表面形式上的扩展特性,我们可以粗略地判断哪些函数可能不是纯函数。比如,一个函数如果没有参数,或者没有返回值,大概就有副作用了,通常不是纯函数。


纯函数的好处

纯函数看起来很简单,但是,大道至简,好处多多。

在函数式编程范式中,纯函数有如下比较典型的好处:

1、可预测性:纯函数对于相同的输入总是返回相同的输出,这使得它们的行为更加可预测,更易于理解和调试。

2、可测试性:由于纯函数不依赖也不改变外部状态,它们的测试变得非常简单,我们只需要为函数提供一组输入并验证输出是否正确即可。

3、并发性和可并行性:纯函数没有副作用,这使得它们天使适合并行执行和多线程编程。不同的线程可以同时调用纯函数,而无需担心竞争条件或者死锁的发生。

4、易于缓存和优化:由于纯函数的输出只依赖于输入,对于相同的输入总是返回相同的结果,因此很适合进行缓存。这样有助于提高性能,特别是对耗时的计算。比如,我们前面通过缓存进行斐波那契数列的计算,其实就是纯函数的缓存。

5、模块化和可组合性:纯函数通常是独立的单元,没有外部依赖,这使得它们易于组合和重用。我们可以很方便地使用函数式的高阶函数来组合纯函数,从而实现更加复杂的逻辑。

纯函数的这些好处,显然也存在于以纯函数的使用为核心特性的函数式编程范式中。而Python作为支持多范式的编程语言,即便不是完全使用函数式编程,我们也可以在其他范式的应用中,组合函数式编程的某些特性,从而更加灵活地实现业务需求。


纯函数的使用与lambda表达式

函数式编程范式,起源于lambda推演。所以,似乎lambda表达式天然与函数式编程存在密不可分的关系。

在Python中,lambda表达式是一种简洁的定义匿名函数的方式,从而可以更加灵活地支持函数式编程的核心概念,在高阶函数、函数组合,以及流式操作中总能看到它们的身影。但是,需要特别说明的是,在Python中,lambda表达式在功能上与普通函数没有本质的区别。

虽然,lambda表达式是一种比较简洁的定义纯函数的方式,但是,lambda表达式本身并不会自动保证纯函数的特性。

以实际代码演示下lambda表达式的基本使用:


执行结果:


我们还可以使用lambda表达式实现高阶函数的特性:


执行结果:


总结

本文简单介绍了纯函数的定义及特性,然后着重列举了简单的纯函数所能带来的好处,最后简单介绍了纯函数与lambda表达式的关系(也就是没啥强关系),并通过代码实例演示了lambda表达式在定义纯函数以及高阶函数中的应用,可以看到lambda表达式对函数式编程范式的支持。

以上就是本文的全部内容了,感谢您的拨冗阅读,希望对您有所帮助。

相关推荐

电脑打不开了怎么重装系统(电脑打不开怎么重装系统不用u盘)

1、在可用电脑上制作好U盘启动盘,将下载的电脑系统iso文件直接复制到U盘的GHO目录下;2、在开不了机的电脑上插入U盘,重启后不停按F12或F11或Esc等快捷键打开启动菜单,选择U盘选项回车,比如...

路由器用户名忘了怎么查(我的路由器用户名忘了怎么办)
  • 路由器用户名忘了怎么查(我的路由器用户名忘了怎么办)
  • 路由器用户名忘了怎么查(我的路由器用户名忘了怎么办)
  • 路由器用户名忘了怎么查(我的路由器用户名忘了怎么办)
  • 路由器用户名忘了怎么查(我的路由器用户名忘了怎么办)
一键清理垃圾下载(一键清除垃圾软件下载)

手机弹出广告是因为手机上的软件自动推送广告,可以在手机设置里关闭应用的消息通知,方法如下:1、找到手机设置,点击进入2、找到应用和通知,点击进入3、点击通知管理,点击进入4、我们可以看到自己开启消息通...

ghost下载中文版官网(ghost8.0下载)

如果你下载的ghostwin7文件如果是用于系统安装。是不是映像文件要符合以下要求:1,压缩包完好无损。2,减压后的映像文件后缀名为ISO或者GHO.3,文件要在硬盘根目录才便于识别。4,映像文件后缀...

win10最新版本是多少2025(win10最新版本是20h2吗)

1、打开软件,选择需要安装的win10系统。(4g以上内存选择64位系统)2、接着我们耐心等待下载重装资源。3、资源下载完成后,等待环境部署完毕重启即可。4、进入到pe系统后,打开小白工具,选择安装的...

u盘显示被写保护怎么处理

U盘被写保护可以通过以下方法解除:格式化U盘:检查U盘上是否有写保护按钮,如果有,将其拨下,然后对U盘进行格式化即可。分区格式为exFat异常:这时需要Win+R打开窗口,输入cmd并点击确定,然后在...

电脑硬盘坏了恢复数据成功率高吗

1.不能全部恢复。因为电脑硬盘数据丢失可能是硬件故障、病毒攻击、人为误操作等原因造成,而不同的原因造成的数据丢失程度不同,可恢复的数据也有所不同。2.但也有可能可以全部恢复。如果是硬件故障引起的数...

移动硬盘怎么分区合并(移动硬盘分区合并最简单三个步骤)

1、按下组合键“win+R”打开运行窗口。2、在其中的输入框中输入“diskmgmt.msc”,再点击“确定”。3、在弹出的窗口中就可以看到要合并的磁盘了。4、在磁盘上单击鼠标右键。在弹出的选项框中点...

笔记本电脑连接不上网络怎么解决
  • 笔记本电脑连接不上网络怎么解决
  • 笔记本电脑连接不上网络怎么解决
  • 笔记本电脑连接不上网络怎么解决
  • 笔记本电脑连接不上网络怎么解决
电脑bios有什么用(电脑bios能干什么)

电脑BIOS(基本输入输出系统)是计算机启动时运行的固件,它负责初始化计算机硬件,并提供操作系统加载所需的基本功能。BIOS主要功能包括:检测和配置硬件设备、加载操作系统、管理电源和温度、提供系统启动...

华硕电脑蓝屏怎么修复(华硕蓝屏怎么办)

华硕电脑蓝屏恢复的方法如下:安全模式进入系统。重启电脑后,连续按下F8键直至出现启动选项界面,选择安全模式进入系统,若此时能够正常运行,说明问题可能是由于软件冲突引起的。检查驱动程序兼容性。过于陈旧或...

win10教育版怎么改成专业版(win10最稳定三个版本)

一、首先,点击Windows10“开始”菜单,找到电脑应用列表,二、然后,在应用列表中找到“Windows系统”文件夹中找到“命令提示符”,点击打开。三、然后,系统跳转到“命令提示符”窗口。四、然后,...

ps下载官网(ps官网免费下载)

要从Adobe官网下载AdobePhotoshop(PS),可以按照以下步骤进行:1.打开网页浏览器,进入Adobe官网的主页。网址是:https://www.adobe.com。2.在网页的顶...

hiwifi极路由登录(hiwifi极路由设置)
  • hiwifi极路由登录(hiwifi极路由设置)
  • hiwifi极路由登录(hiwifi极路由设置)
  • hiwifi极路由登录(hiwifi极路由设置)
  • hiwifi极路由登录(hiwifi极路由设置)
连wifi就能打电话的软件(无卡用wifi打电话)

我的手机是安卓2.2系统所有这里只针对Android2.2系统其他系统版本的朋友可以试一试需要一款拨号软件:PPPOE拨号软件;而拨号软件必须要获得root权限(管理权限)才能拨号;下载安装这...

取消回复欢迎 发表评论: