一、lambda()函数
1、描述
lambda函数即匿名函数
2、语法
lambda argument_list:expression
解释:argumen_list(可选参数)为参数列表形式非常多如:a=1,b=2;*args;**kwargs、也可为空如lambda:3等等
expression为表达式(即为通过参数最后执行的结果)形式也非常多常见的x+y;x**2,函数、三元表达式等,可以数值表达式,也可以字符表达式,可以是常量。
3、用法
1、lambada x,y:2 即无论x,y为多少最后的执行结果均为2
2、lambda :None 即该函数已把结果固定为关键字None,所以什么也不做就返回None,可把函数的功能去掉
如想把test函数功能替换掉,可test=lambda :None,再执行test已经没有了原来的功能,当然也可以替换为其他功能如:
test=lambda:3,那么再执行test函数就会返回3。因为重新定义了test的地址,和重新定义一个变量类似。
3、lambda函数可作为值传给变量,即把lambda的地址传给了变量(其实已变为函数),执行的话只需把参数传过去即可
t=lambda x,y:x+y print(t(3,5))
4、lambda的三元表达式用法,如:
print(list(map(lambda x:x if x!=3 else 100,[1,2,3,4])))
结果:
[1, 2, 100, 4]
5、lambda可作为参数传递,应用是比较多的 与map函数应用比较多,如:
print(set(map(lambda x,y,z,s:x+y*z-s,[1,3,4],[10,1,1],[4,5,6],[1,2,3])))
names = ['alex', 'mary', 'jack']
age = [15, 17, 89, 90]
person_dic = {}
print(list(map(lambda x,y:x+str(y),names,age)))
print(dict(map(lambda x,y:(y,x),names,age)))
结果:
{40, 6, 7}
['alex15', 'mary17', 'jack89'] 可合并两个列表拼接字符串为一个列表
{15: 'alex', 17: 'mary', 89: 'jack'} 可合并两个列表生成键值对从而生成字典
二、map()函数
1、描述
map() 会根据提供的函数对指定序列做映射(强调的是创建对应关系)。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
2、语法
map() 函数语法: map(function, iterable, ...)
解释:function:代表函数(可以是内置函数也可以是自定义的函数);iterable:一个或多个序列(如列表,字符串等可for循环的即可迭代对象)
3、返回结果为迭代器对象
4、实例
print(set(map(lambda x,y,z,s:x+y*z-s,[1,3,4],[10,1,1],[4,5,6],[1,2,3,4,5])))
t=map(lambda x,y,z,g:x+y*z-g,[1,2,4],[12,45,55],[11,22,33],[44,55,66,154])
print(t)
print(type(t))
print(t.__next__())
结果:
{40, 6, 7}
<map object at 0x7fb280b13f60>
<class 'map'>
89
注:1、为什么第一个结果只有三个元素,以列表中元素个数最少的为基准。
2、map返回的迭代对象因为有__next__()方法
5、map与zip即拉链函数的简单区别
map()一样可以达到zip()的效果,zip()简洁但map()更灵活
names = ['alex', 'mary', 'jack']
age = [15, 17, 89, 90]
print(max(set(map(lambda x,y:(y,x),names,age))))
print(list(map(lambda x,y:(y,x),names,age)))
print(max(list(zip(age, names))))
结果:
(89, 'jack')
[(15, 'alex'), (17, 'mary'), (89, 'jack')]
(89, 'jack')
三、filter()函数
1、描述
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
2、语法
以下是 filter() 方法的语法:
filter(function, iterable) function: 条件函数。iterable : 可迭代对象。
3、返回迭代器对象
4、实例
内置函数
print(list(filter(lambda x:not x==1,[1,3,5])))
结果:
[3, 5]
自定义函数
"""判断3的倍数"""
def judge(x):
return x % 3 ==0
print(list(filter(judge,list(range(1,30)))))
结果:
[3, 6, 9, 12, 15, 18, 21, 24, 27]
四、reduce()函数
1、描述
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
注:Python2为内置函数,Python3已不为内置需先 import functools fromreduce
2、语法
reduce() 函数语法:
reduce(function, iterable[, initializer])
function -- 函数,要求有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数,带中括号的为可选参数
3、实例
from functools import reduce
print(reduce(lambda x,y:x+y,[1,5,6]))
print(reduce(lambda x,y:x+y,[1,5,6],10))
结果:
12
22 因为有初始值10
参考:菜鸟教程