python中lambda函数的计算题_Python练习题详解之lambda表
达式和map。。。
Python练习题详解之lambda表达式和map、filter(⼩⽩友好)
你好!欢迎来到Python练习题详解系列。为了让⼩⽩(也就是我本⼈)更好的理解代码,打好编程基础,我决定仔细地解说⼀些练习题。欢迎阅读!奥利给!
⾸先,我们来看看知识点~
⼀、lambda表达式
lambda这个名字让我莫名想吃烤⽺排了, 他是什么东西呢?
lambda是⼀个⽤来创建匿名函数的关键字。他跟普通函数的区别是什么呢?我们⼀起来看看:
⾸先我们来定义⼀个普通的函数:
如果⽤lambda来写,这个函数就是这样的:
如上图所⽰,这个lambda表达式是由lambda和后⾯三部分组成,分别是左边,中间的冒号,和右边。
冒号的左边代表的是这个函数的参数,冒号的右边代表了函数的返回值。
那有的⼩伙伴会想,如果我有两个参数捏,肿么办?
放⼼~我们这⾥没有凉拌炒鸡蛋。我们的lambda函数是可以有两个参数滴:
总结⼀下lambda表达式的作⽤:
(1)Python写⼀些执⾏脚本时,使⽤lambda就可以省下定义函数过程,⽐如说我们只是需要写个简单的脚本来管理服务器时间,我们就不需要专门定义⼀个函数然后再写调⽤,使⽤lambda就可以使得代码更加精简。
(2)对于⼀些⽐较抽象并且整个程序执⾏下来只需要调⽤⼀两次的函数,有时候给函数起个名字也是⽐较头疼的问题,使⽤lambda就不需要考虑命名的问题了。
(3)简化代码的可读性,由于普通的函数阅读经常要跳到开头def定义部分,使⽤lambda函数可以省去这样的步骤。
⼆、两个常见的BIF:filter()和map()
1、filter()
我们每天会接触到⼤量的数据,过滤器的作⽤就显得⾮常重要了,通过过滤器,就可以保存你所关注的信息,把其它不感兴趣的东西直接丢掉。
filter有两个参数,第⼀个参数可以是⼀个函数,也可以是⼀个空值None;第⼆个参数呢,是这个循环⾥⾯可迭代的数据。
如果第⼀个参数为None,则直接将第⼆个参数中为True的值筛选出来。
如果第⼀个参数是⼀个函数的话,则将第⼆个可迭代数据⾥的每⼀个元素作为函数的参数进⾏计算,把返回True的值筛选出来。
举个栗⼦:如下图,filter的第⼀个参数是odd,也就是第⼀⾏我们所定义的函数。filter的第⼆个参数是temp,也就是range(10)的这个可迭代的数据。在odd函数⾥⾯,我们让 x % 2,我们知道,此时如果返回1(True),那就是奇数,如果返回0(False),就是偶数。
所以!这个filter函数就很好的给我们过滤出true的内容,也就是我们想要的odd number奇数。
当然,也可以结合我们的lambda函数,举个栗⼦,我们把上⾯这个筛选奇数的代码转换成lambda的表达形式:
2.map()
map()这个内置函数也有两个参数,仍然的是⼀个函数和⼀个可迭代序列,
map()将序列的每⼀个元素作为函数的参数进⾏运算加⼯,直到可迭代序列每个元素都加⼯完毕,返回所有加⼯后的新序列。
举个例⼦,这⾥就是返回了0-4这些数字*2之后的结果:
好啦,我们看看题⽬吧
题⽬1
⽤filter()函数和lambda表达式快速求出100以内所有3的倍数
思路:
100以内,说明我们的range是range(100),三的倍数,说明我们的结果% 3 的话没有余数,等于零。
filter函数的前半部分⼀定就是⼀个lambda函数了,这个前半部分我们要让3的倍数为true,⽽三的倍数%3会等于零,零是False,所以我们就要把这个结果反过来。可以⽤not关键字或者让 x % 3 == 0
lambda编程那么后半部分就是我们的range(100)啦。
答案:(两种⽅法)
题⽬2
使⽤zip会将两数以元祖的形式绑定在⼀块,例如:
但如果我希望打包的形式是灵活多变的列表⽽不是元祖(希望是[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]这种形式),你能做到吗?(采⽤map 和lambda的表达式)
思路:
如果是⼀个[ x, y ]的形式的话,说明我们的lambda要传进两个参数。然后return是以⼀个[ x, y ]的形式出现。那么lambda冒号的左边就是 x, y. 右边就是[ x, y ]。
⾄于map的可迭代序列,我们可以直接输⼊ [1,3,5,7,9] 和 [2,4,6,8,10] ,这样就会让系统每次迭代输出[1,2],[3, 4], [5, 6], [7, 8], [9, 10],奥利给!
题⽬3
下⾯的代码会⽣成什么呢?
思路:
我们发现,在milktea函数⾥⾯,还有⼀个匿名函数lambda,lambda引⽤了外部函数的y,所以,这就是⼀个闭包。
在第三⾏,fat = milktea() 给 y 赋值为2,第四⾏的 fat () 也就相当于 milktea()(), 此时便进⼊我们的匿名函数lambda中。匿名函数的变量x此时被赋值为8,说明第四⾏print出来就是 2 * 8 = 16
⽽第五⾏的print 也⼀样给我们的 x 赋值为‘好喝’,那么在y变量没有被改变的情况下,好喝 * 2 就是好喝好喝啦!
答案:
今天就到这⾥结束啦,晚安!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论