Python中使用Lambda函数的5种用法


Posted in Python onApril 01, 2021

引言

Lambda 函数(也称为匿名函数)是函数式编程中的核心概念之一。

支持多编程范例的 Python 也提供了一种简单的方法来定义 lambda 函数。

用 Python 编写 lambda 函数的模板是:

lambda arguments : expression

它包括三个部分:

· Lambda 关键字

· 函数将接收的参数

· 结果为函数返回值的表达式

由于它的简单性,lambda 函数可以使我们的 Python 代码在某些使用场景中更加优雅。这篇文章将演示在 Python 中 lambda 函数的5个常见用法,并用有趣的例子来解释它们。

1.命名使用

如果我们只需要一个简单的函数,lambda 是一个很好的选择,因为它可以被看作是定义函数的一种更简单的方法。因此,我们可以给它一个名称,并像普通函数一样使用它。

lambda_add_ten = lambda x: x + 10
print(lambda_add_ten(5))
# 15
 
def add_ten(x):
 return x + 10
print(add_ten(5))
# 15

如上面的例子所示,add_ten() 和 lambda_add_ten() 方法的结果是相同的,但是 lambda 函数可以使我们的代码更短更清晰。

2. 与高阶函数配合

如果我们可以将 lambda 函数与 map()、 filter()和 reduce()等高阶函数一起使用,那么程序将变得更加优雅。

让我们来看下面这个问题:

给你一个列表如下,你能打印其中所有的奇数吗?

numbers = [1, 12, 37, 43, 51, 62, 83, 43, 90, 2020]

这个问题看起来很简单,但它足以区分初级和高级 Python 开发人员。

初级程序员可能会编写如下代码:

odd_number = []
for n in numbers:
 if n % 2 == 1:
 odd_number.append(n)
print(odd_number)
# [1, 37, 43, 51, 83, 43]

它工作正常,没有任何问题。然而,一个高级 Python 程序员只需要一行代码就可以做同样的事情:

print(list(filter(lambda x: x % 2 == 1, numbers)))
# [1, 37, 43, 51, 83, 43]

它看起来更优雅,不是吗?

顺便说一下,上面的一行解决方案只是为了展示如何使用 lambda 函数。当然还有其他的单行解决方案,比如列表解析:

odd_numbers = [i for i in numbers if i % 2 == 1]

实际上,在许多情况下,列表内涵函数可能比高阶函数与 lambda 函数协作更具可读性。

3.赋予“key”参数

一些内置方法具有关键的参数,这些参数给我们提供了更多的灵活性。

例如,当我们使用 sorted()或 sort()方法对 Python 中的迭代进行排序时,关键参数决定如何比较迭代中的两个元素。

这里也是 lambda 函数的表演时间。

leaders = ["Warren Buffett", "Yang Zhou", "Tim Cook", "Elon Musk"]
print(leaders)
# ['Warren Buffett', 'Yang Zhou', 'Tim Cook', 'Elon Musk']
leaders.sort(key=lambda x: len(x))
print(leaders)
# ['Tim Cook', 'Yang Zhou', 'Elon Musk', 'Warren Buffett']

如上所述,如果我们按照每个名称的长度对 leaders 列表进行排序,一个简单的方法是向 key 参数传递一个 lambda 函数。

另一个常见的使用场景是根据字典的键或值对其进行排序。

leaders = {4: "Yang Zhou", 2: "Elon Musk", 3: "Tim Cook", 1: "Warren Buffett"}
print(leaders)
# {4: 'Yang Zhou', 2: 'Elon Musk', 3: 'Tim Cook', 1: 'Warren Buffett'}
leaders = dict(sorted(leaders.items(), key=lambda x: x[0]))
print(leaders)
# {1: 'Warren Buffett', 2: 'Elon Musk', 3: 'Tim Cook', 4: 'Yang Zhou'}

4.立即调用

立即调用的函数表达式(IIFE)是 JavaScript 中的一种习惯用法。Python 中的 lambda 函数也支持这个技巧。我们可以立即运行一个 lambda 函数,如下所示:

>>> (lambda x,y:x*y)(2,3)
6

但是,出于可读性和可维护性的考虑,最好只在 Python 的交互式解释器中使用这个技巧。

顺便说一句,如果你熟悉Python中的下划线技巧,则也可以使用以下方式。

>>> lambda x,y:x*y
<function <lambda> at 0x7fc319102d30>
>>> _(2,3)
6

5.在闭包中使用

闭包是一个功能强大的函数式编程特性,在 Python 中也可以使用。因为它是关于嵌套函数的,所以我们可以使用 lambda 函数来使程序更加清晰。

下面是使用闭包的一个例子:

def outer_func():
 leader = "Yang Zhou"
 def print_leader(location=""):
 return leader + " in the " + location
 return print_leader
 
 
Lead = outer_func()("UK")
print(Lead)
# Yang Zhou in the UK

我们该如何使用 lambda 函数来简化上面的代码?

def outer_func():
 leader = "Yang Zhou"
 return lambda location="": leader + " in the " + location
 
Lead = outer_func()("UK")
print(Lead)
# Yang Zhou in the UK

正如上面的例子所示,当我们使用嵌套函数时,lambda 函数可以帮助我们编写更易读和清晰的代码。

总结

Python 中的 lambda 函数为我们提供了更多的灵活性和方法设计选项。总之,我们应该熟悉以上五种常见用法,以便正确使用,而不是过度使用。

到此这篇关于Python中使用Lambda函数的5种用法的文章就介绍到这了,更多相关python使用Lambda函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
python中的set实现不重复的排序原理
Jan 24 Python
python实现图书管理系统
Mar 12 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
Python 变量类型详解
Oct 10 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Django 重写用户模型的实现
Jul 29 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
容易被忽略的Python内置类型
Sep 03 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
python 实现mysql自动增删分区的方法
Apr 01 #Python
pygame面向对象的飞行小鸟实现(Flappy bird)
如何用python插入独创性声明
python OpenCV学习笔记
python基于OpenCV模板匹配识别图片中的数字
Python insert() / append() 用法 Leetcode实战演示
Mar 31 #Python
tensorflow学习笔记之tfrecord文件的生成与读取
Mar 31 #Python
You might like
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
DIV菜单层实现代码
2010/11/19 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
JavaScript中的闭包
2016/02/24 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python__new__内置静态方法使用解析
2020/01/07 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
优质护理服务演讲稿
2014/05/07 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
出国导师推荐信
2015/03/25 职场文书
2016七夕情人节感言
2015/12/09 职场文书
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript