python:lambda匿名函数,高效的表达方式

在平时做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))))
[3]

会以列表形式(因为我用的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用于循环的做一件事左参数为累加值,右参数为序列值,并在序列为空时用作默认值。
这几个常用的就介绍到这了,如果再学习当中有其他的好用函数,我会第一时间分享再上面。
如有不恰当的地方,还请指正。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈鸣coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值