产业新知热门
加国央行再次疯狂加息 月供将暴涨 物价竟会这样变化 无人幸免的购物节“大逃杀” 兼职做自媒体这些天:有人年入五块四,有人时薪一百二 瞄准数亿过敏人群,以过敏数字疗法为切点,杭州数智医掘金新蓝海 武汉大学疑似出现霍乱病例 期货不严格止损是超短线交易失败的根源 ,精细赛道也能走到上市! 预制菜,会有“刺客”吗推荐资讯
让区块链变成人人可用的工具,上海原创Web3.0操作系统是如何诞生的 隐私之变|自我主张时代变革,从构建WEB3.0的ID体系开始 被投资圈盯上,风头超过元宇宙,Web3.0到底是啥? Web3.0,勾勒下一代互联网模样 为什么说中国汽车产业已经真正“支棱”起来了 我在新能源汽车行业打工10年:从月薪2千涨至年薪40万,终于熬出头 对话梅宏院士:数字化转型不是想不想,而是必须转 王兴继续“电商零售梦”:告别社区团购 美团优选变身明日达超市中的万能之王 Lambda 函数
Python 提供了非常多的库和内置函数。有不同的方法可以执行相同的任务,而在 Python 中,有个万能之王函数:lambda 函数,它可以以不同的方式在任何地方使用。今天和大家一起研究下这个万能之王!
: Lambda 函数简介 :
Lambda函数也被称为匿名(没有名称)函数,它直接接受参数的数量以及使用该参数执行的条件或操作,该参数以冒号分隔,并返回最终结果。为了在大型代码库上编写代码时执行一项小任务,或者在函数中执行一项小任务,便在正常过程中使用lambda函数。
lambda argument_list:expersion
argument_list
是参数列表,它的结构与Python
中函数(function
)的参数列表是一样的a,b
a=1,b=2*args**kwargsa,b=1,*args空....expression
是一个关于参数的表达式,表达式中出现的参数需要在argument_list
中有定义,并且表达式只能是单行的。1
Nonea+bsum(a)1 if a >10 else 0[i for i in range(10)]... 普通函数和Lambda函数的区别 : -
没有名称Lambda函数没有名称,而普通操作有一个合适的名称。
-
Lambda函数没有返回值使用
def
关键字构建的普通函数返回值或序列数据类型,但在Lambda函数中返回一个完整的过程。假设我们想要检查数字是偶数还是奇数,使用lambda函数语法类似于下面的代码片段。
没有名称Lambda函数没有名称,而普通操作有一个合适的名称。
Lambda函数没有返回值使用
def
关键字构建的普通函数返回值或序列数据类型,但在Lambda函数中返回一个完整的过程。假设我们想要检查数字是偶数还是奇数,使用lambda函数语法类似于下面的代码片段。b = lambda x: "Even" if x%2==0 else "Odd"
b(9)-
函数只在一行中Lambda函数只在一行中编写和创建,而在普通函数的中使用缩进
-
不用于代码重用Lambda函数不能用于代码重用,或者不能在任何其他文件中导入这个函数。相反,普通函数用于代码重用,可以在外部文件中使用。
为什么要使用Lambda函数? :
一般情况下,我们不使用Lambda函数,而是将其与高阶函数一起使用。高阶函数是一种需要多个函数来完成任务的函数,或者当一个函数返回任何另一个函数时,可以选择使用Lambda函数。
什么是高阶函数? :
通过一个例子来理解高阶函数。假设有一个整数列表,必须返回三个输出。
-
一个列表中所有偶数的和
-
一个列表中所有奇数的和
-
一个所有能被三整除的数的和
首先假设用普通函数来处理这个问题。在这种情况下,将声明三个不同的变量来存储各个任务,并使用一个for循环处理并返回结果三个变量。该方法常规可正常运行。
现在使用Lambda函数来解决这个问题,那么可以用三个不同的Lambda函数来检查一个待检验数是否是偶数,奇数,还是能被三整除,然后在结果中加上一个数。
def return_sum(func, lst):
result = 0 for i in lst: #if val satisfies func if func(i): result = result + i return resultlst = [11,14,21,56,78,45,29,28]x = lambda a: a%2 == 0y = lambda a: a%2 != 0z = lambda a: a%3 == 0print(return_sum(x, lst))print(return_sum(y, lst))print(return_sum(z, lst))这里创建了一个高阶函数,其中将Lambda函数作为一个部分传递给普通函数。其实这种类型的代码在互联网上随处可见。然而很多人在使用Python时都会忽略这个函数,或者只是偶尔使用它,但其实这些函数真的非常方便,同时也可以节省更多的代码行。接下来我们一起看看这些高阶函数。
Python内置高阶函数 :
Map函数
map() 会根据提供的函数对指定序列做映射。
Map函数是一个接受两个参数的函数。第一个参数 function 以参数序列中的每一个元素调用 function 函数,第二个是任何可迭代的序列数据类型。返回包含每次 function 函数返回值的新列表。
map(function, iterable, ...)
Map函数将定义在迭代器对象中的某种类型的操作。假设我们要将数组元素进行平方运算,即将一个数组的每个元素的平方映射到另一个产生所需结果的数组。
arr = [2,4,6,8]
arr = list(map(lambda x: x*x, arr)) print(arr)我们可以以不同的方式使用Map函数。假设有一个包含名称、地址等详细信息的字典列表,目标是生成一个包含所有名称的新列表。
students = [
{"name": "John Doe", "father name": "Robert Doe", "Address": "123 Hall street" }, { "name": "Rahul Garg", "father name": "Kamal Garg", "Address": "3-Upper-Street corner" }, { "name": "Angela Steven", "father name": "Jabob steven", "Address": "Unknown" }]print(list(map(lambda student: student['name'], students)))>>> ['John Doe', 'Rahul Garg', 'Angela Steven']上述操作通常出现在从数据库或网络抓取获取数据等场景中。
Filter函数 :
Filter函数根据给定的特定条件过滤掉数据。即在函数中设定过滤条件,迭代元素,保留返回值为True 的元素。Map 函数对每个元素进行操作,而 filter 函数仅输出满足特定要求的元素。
假设有一个水果名称列表,任务是只输出那些名称中包含字符
“g”
的名称。fruits = ['mango', 'apple', 'orange', 'cherry', 'grapes']
print(list(filter(lambda fruit: 'g' in fruit, fruits)))filter(function or None, iterable) --> filter object
返回一个迭代器,为那些函数或项为真的可迭代项。如果函数为None,则返回为真的项。
Reduce函数 :
这个函数比较特别,不是 Python 的内置函数,需要通过
from functools import reduce
导入。Reduce 从序列数据结构返回单个输出值,它通过应用一个给定的函数来减少元素。reduce(function, sequence[, initial]) -> value
将包含两个参数的函数(
function
)累计应用于序列(sequence
)的项,从左到右,从而将序列reduce
至单个值。如果存在
initial
,则将其放在项目之前的序列,并作为默认值时序列是空的。假设有一个整数列表,并求得所有元素的总和。且使用reduce函数而不是使用for循环来处理此问题。
from functools import reduce
lst = [2,4,6,8,10]print(reduce(lambda x, y: x+y, lst))>>> 30还可以使用 reduce 函数而不是for循环从列表中找到最大或最小的元素。
lst = [2,4,6,8]
# 找到最大元素print(reduce(lambda x, y: x if x>y else y, lst))# 找到最小元素print(reduce(lambda x, y: x if x列表推导式
其实列表推导式只是一个for循环,用于添加新列表中的每一项,以从现有索引或一组元素创建一个新列表。之前使用map、filter和reduce完成的工作也可以使用列表推导式完成。然而,相比于使用Map和filter函数,很多人更喜欢使用列表推导式,也许是因为它更容易应用和记忆。
同样使用列表推导式将数组中每个元素进行平方运算,水果的例子也可以使用列表推导式来解决。
arr = [2,4,6,8]
arr = [i**2 for i in arr]print(arr)fruit_result = [fruit for fruit in fruits if 'g' in fruit]print(fruit_result)字典推导式
与列表推导式一样,使用字典推导式从现有的字典创建一个新字典。还可以从列表创建字典。
假设有一个整数列表,需要创建一个字典,其中键是列表中的每个元素,值是列表中的每个元素的平方。
lst = [2,4,6,8]
D1 = {item:item**2 for item in lst}print(D1)>>> {2: 4, 4: 16, 6: 36, 8: 64}# 创建一个只包含奇数元素的字典arr = [1,2,3,4,5,6,7,8]D2 = {item: item**2 for item in arr if item %2 != 0}print(D2)>>> {1: 1, 3: 9, 5: 25, 7: 49}一个简单应用 :
如何快速找到多个字典的公共键
方法一
dl = [d1, d2, d3] # d1, d2, d3为字典,目标找到所有字典的公共键
[k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))]例
dl = [{1:'life', 2: 'is'},
{1:'short', 3: 'i'}, {1: 'use', 4: 'python'}][k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))]# 1解析
# 列表表达式遍历dl中第一个字典中的键
[k for k in dl[0]]# [1, 2]# lambda 匿名函数判断字典中的键,即k值是否在其余字典中list(map(lambda d: 1 in d, dl[1:]))# [True, True]list(map(lambda d: 2 in d, dl[1:]))#[False, False]# 列表表达式条件为上述结果([True, True])全为True,则输出对应的k值#1方法二
# 利用集合(set)的交集操作
from functools import reduce# reduce(lambda a, b: a*b, range(1,11)) # 10!reduce(lambda a, b: a & b, map(dict.keys, dl))写在最后 :
目前已经学习了Lambda函数是什么,以及Lambda函数的一些使用方法。随后又一起学习了Python中的高阶函数,以及如何在高阶函数中使用lambda函数。
除此之外,还学习了高阶函数的替代方法:在列表推导式和字典推导式中执行之前操作。虽然这些方法看似简单,或者说你之前已经见到过这类方法,但你很可能很少使用它们。你可以尝试在其他更加复杂的函数中使用它们,以便使代码更加简洁。
更多相关内容
-
亚马逊产品细节图包含哪些
亚马逊卖家在上传产品时通常会忽略掉的就是产品的图片了,如果产品的图片不能出彩的话,那么就不能吸引...
-
2022年5月湖南地区各市专利授权量排行榜:2个地区以外观设计专利为主(附月榜TOP14详单)
榜单解读: 2022年5月,湖南地区专利总授权量为8841个,环比下降了8.66%,实用新型专利占比最多,有5...
-
代办北京丰台区注册公司包含注册地址和记账服务
代办北京丰台区注册公司包含注册地址和记账服务,律晓宇,I59,IO37,767我们有从业十年以上会计师团队,...
-
CRM还是呼叫中心
Q 在解答客户咨询的时候,总有人问小Z:”你们支持几个坐席? 小Z:”哎呀对不起,我是CRM,不是呼...
-
电商后台--数据管理模块的设计
数据管理是什么? 数据管理,就是对数据进行有效的收集、储存、处理、和应用的过程,其目的在于充分...
-
公司名称中带中国字样的名称如何办理
公司名称中带中国字样的名称如何办理生活中可以看到很多知名度比较高的企业或者公司名称中包含“中国”...
-
世链矿业|矿机托管费用怎么算
世链矿业网(shilianm.com)报道,目前挖矿托管已迅速成长为一个成熟产业,现阶段挖矿针对专业的挖矿机...
-
内资深圳商业保理公司代理收购费用多少
内资深圳商业保理公司代理收购费用多少由于商业保理业务在国内得到迅速发展,所以,保理公司的业务越来...
-
深圳纯外资融资租赁公司代理转让
深圳纯外资融资租赁公司代理转让深圳融资租赁企业在2019与2020年之间的清退空壳活动后,不经营的前海自...
推荐阅读