网站建设哪里有,wordpress怎么对接公众号,建设电子商务网站总体设计阶段,软件工程师考试报名当你需要完成一件小工作时#xff0c;在本地环境中使用这个函数#xff0c;可以让工作如此得心应手#xff0c;它就是 Lambda 函数。
Lambda 函数是 Python 中的匿名函数。有些人将它们简称为lambdas#xff0c;它们的语法如下#xff1a;
lambda arguments: expression…当你需要完成一件小工作时在本地环境中使用这个函数可以让工作如此得心应手它就是 Lambda 函数。
Lambda 函数是 Python 中的匿名函数。有些人将它们简称为lambdas它们的语法如下
lambda arguments: expressionlambda 关键字可以用来创建一个 lambda 函数紧跟其后的是参数列表和用冒号分割开的单个表达式。例如lambda x: 2 * x 是将任何输入的数乘2而 lambda x, y: xy 是计算两个数字的和。语法十分直截了当对吧
假设您知道什么是 lambda 函数本文旨在提供有关如何正确使用 lambda 函数的一些常规准则。 文章目录技术提升1. 不要返回任何值2. 不要忘记更好的选择3. 不要将它赋值给变量4. 不要忘记列表推导式结论技术提升
技术要学会分享、交流不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
本文来自粉丝的分享、推荐资料干货、资料分享、数据、技术交流提升均可加交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、添加微信号pythoner666备注来自CSDN 方式②、微信搜索公众号Python学习与数据挖掘后台回复加群 1. 不要返回任何值
看看语法您可能会注意到我们在 lambda 函数中并没有返回任何内容。这都是因为 lambda 函数只能包含一个表达式。然而使用 return 关键字会构成不符合规定语法的语句如下所示 integers [(3, -3), (2, 3), (5, 1), (-4, 4)]sorted(integers, keylambda x: x[-1])
[(3, -3), (5, 1), (2, 3), (-4, 4)]sorted(integers, keylambda x: return x[-1])
... File , line 1sorted(integers, keylambda x: return x[-1])^
SyntaxError: invalid syntax该错误可能是由于无法区分表达式和语句而引起的。像是包含 return、try、 with 以及 if 的语句会执行特殊动作。然而表达式指的是那些可以被计算出一个值的表达例如数值或其他 Python 对象。
通过使用 lambda 函数单个表达式会被计算为一个值并且参与后续的计算例如由 sorted 函数排序。
2. 不要忘记更好的选择
lambda 函数最常见的使用场景是将它作为一些内置工具函数中 key 的实参比如上面展示的 sorted() 和 max()。根据情况我们可以使用其他替代方法。思考下面的例子 integers [-4, 3, 7, -5, -2, 6]sorted(integers, keylambda x: abs(x))
[-2, 3, -4, -5, 6, 7]sorted(integers, keyabs)
[-2, 3, -4, -5, 6, 7]scores [(93, 100), (92, 99), (95, 94)]max(scores, keylambda x: x[0] x[1])
(93, 100)max(scores, keysum)
(93, 100)在数据科学领域很多人使用 pandas 库来处理数据。如下所示我们可以使用 lambda 函数通过 map() 函数从现有数据中创建新数据。除了使用 lambda 函数外我们还可以直接使用算术函数因为 pandas 是支持的 import pandas as pddata pd.Series([1, 2, 3, 4])data.map(lambda x: x 5)
0 6
1 7
2 8
3 9
dtype: int64data 5
0 6
1 7
2 8
3 9
dtype: int643. 不要将它赋值给变量
我曾见过一些人将 lambda 函数误认为是简单函数的另一种声明方式您可能也见过有人像下面这么做 doubler lambda x: 2 * xdoubler(5)
10doubler(7)
14type(doubler)
class function对 lambda 函数命名的唯一作用可能是出于教学目的以表明 lambda 函数的确是和其他函数一样的函数——可以被调用并且具有某种功能。除此之外我们不应该将 lambda 函数赋值给变量。
为 lambda 函数命名的问题在于这使得调试不那么直观。与其他的使用常规 def 关键字创建的函数不同lambda 函数没有名字这也是为什么有时它们被称为匿名函数的原因。思考下面简单的例子找出细微的区别 inversive0 lambda x: 1 / xinversive0(2)
0.5inversive0(0)
Traceback (most recent call last):File , line 1, in moduleFile , line 1, in
ZeroDivisionError: division by zerodef inversive1(x):
... return 1 / x
... inversive1(2)
0.5inversive1(0)
Traceback (most recent call last):File , line 1, in moduleFile , line 2, in inversive1
ZeroDivisionError: division by zero当您的代码存在关于 lambda 函数的问题即 inversive0Traceback 错误信息只会提示您 lambda 函数存在问题。
相比之下使用正常定义的函数Traceback会清晰地提示您有问题的函数即 inversive1。
与此相关如果您想多次使用 lambda 函数最佳实践是使用通过 def 定义的允许使用文档字符串的常规函数。
4. 不要忘记列表推导式
有些人喜欢将 lambda 函数和高阶函数一起使用比如 map 或 filter。思考下面用法示例 # 创建一个数字列表numbers [2, 1, 3, -3]# 使用带有 lambda 函数的 map 函数list(map(lambda x: x * x, numbers))
[4, 1, 9, 9]# 使用带有 lambda 函数的 filter 函数list(filter(lambda x: x % 2, numbers))
[1, 3, -3]我们可以使用可读性更强的列表推导式代替 lambda 函数。如下所示我们使用列表推导式来创建相同的列表对象。如您所见与列表推导式相比之前将 map 或 filter 函数与 lambda 函数一起使用更麻烦。因此在创建涉及高阶函数的列表时应考虑使用列表推导式。 # Use list comprehensions[x * x for x in numbers]
[4, 1, 9, 9][x for x in numbers if x % 2]
[1, 3, -3]结论
在本文中我们回顾了使用 lambda 函数可能会犯的四个常见错误。通过避免这些错误您应该能在代码中正确使用 lambda 函数。
使用 lambda 函数的经验准则是保持简单以及只在本地使用一次。