在平时做python作业时总会用到这几个函数,今天来做个总结
1.lambda函数:
在平时编写简单的程序时这个函数非常好用,什么找偶数,取掉一些特殊的数字,一些题目无理的要求,它都很好用。今天简单整理一下他的用法:
先看看菜鸟
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 lambda
函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda函数的语法只包含一个语句:
lambd(arg1,(,arg2,…argn)):expression
他的格式呢很好理解,直接上代码一目了然(这里用的map,filter后面都会讲到的~)
re=list(map(lambda x,y:x+y,[1,2,3],[2,3,4]))#当运算符号为%时表示判断 print(re)
re=list(map(lambda x:x**2,range(1,5)))#当运算符号为%时表示判断 print(re)
这个代码的另一种形式为
def square(x): return x**2 result = list(map(square,[1,2,3,4,5])) print(result)
lambda的简洁的写法是不是更简单更有逼格呢~
再举一个栗子:
先写复杂的形式吧(没有对比就没有伤害)
def is_odd(n): return n % 2 == 1 tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) newlist = list(tmplist) print(newlist)
看好了lambda的代码:
tmplist = list(filter(lambda n:n%2==0,range(1,11)))#上一个代码的简写,偶数找出来 print(tmplist)
两行解决战斗,其实也可以一行
print(list(filter(lambda n:n%2==0,range(1,11))))
是不是惊呆了~~
先解释一下这个代码吧:filter是可以理解为过滤的意思,只要是在0~10的数能被2除余数为0那么就选出来,然后range完后就能打印出偶数了,后面详解。
所以完成一些加减乘除不用def直接lambd就可以了,节省时间(人生苦短,我用python)
再再就一个栗子
import math new=list(filter(lambda x:math.sqrt(x)%1==0,range(1,101)))#选出平方根是整数的数字 print(new)
lambda我还没学怎么深入,以后再补充
2.map函数:
先看菜鸟解释:
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map(function, iterable, …)
function – 函数
iterable – 一个或多个序列
也就是将一个函数用在需要用的地方
def square(x): return x**2 result=list(map(square,[1,2,3,4,5])) print(result)
re=list(map(lambda x:x**2,range(1,5)))#当运算符号为%时表示判断 print(re)
这两个就能很好的对比lambda的与def函数的用法
并且map与fliter返回的都是生成器(generator),
re=(map(lambda x,y:x+y,[1,2,3],[2,3,4]))#当运算符号为%时表示判断 print(re)
运行结果
<map object at 0x00000214383AADC8>
也就是可以for遍历出值:
re=map(lambda x:x**2,range(1,5))#当运算符号为%时表示判断 for i in re : print(i,end=' ')
还有许多神奇的用法,大家可以去探索哦
3.filter函数:
菜鸟:
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法
以下是 filter() 方法的语法:
filter(function, iterable)
上面已经有许多栗子了,这里简单举一个
a=sum(list(filter(lambda x:x*x,range(1,5)))) print(a)
运行过的小伙伴会发现,返回值为:1,2,3,4
为什么会这样呢,因为filter会进行一个判断,就不会进行x*x这个步骤
如果我们这样:
print(list(filter(lambda x:x*x==x*3,range(1,5))))
会以列表形式(因为我用的list)得到这个值[3]因为只有3这个值满足,所以返回3,这是我的理解,希望大家能够有更好的想法 ,也可以告诉我哦.还有filter只能用一个可迭代对象,我试过两个却报错了。可能它这个函数参数只能有一个吧,有兴趣的可以去研究一下哦。
4.reduce函数的用法:
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第
1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
注意:Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用
reduce() 函数:
from functools import reduce
reduce() 函数语法: reduce(function, iterable[, initializer])
function – 函数,有两个参数
iterable – 可迭代对象
initializer – 可选,初始参数
当然这个函数也可以和lambda联动的哦~
from functools import reduce#reduce需要调用 a=reduce(lambda x,y:x+y,range(1,5)) print(a)
结果等于1+2+3+4=10
reduce用于循环的做一件事左参数为累加值,右参数为序列值,并在序列为空时用作默认值。