Python笔记-lambda表达式

在学习廖雪峰大佬的python入门博客时,发现有人提出了关于lambda表达式的问题

下方代码是求1000以内的素数


当把it=filter(_not_divisible(n), it)改成 it=filter(lambda x: x%n>0, it)之后,计算的结果就会不符合预期


明显9不是素数,一开始也懵了,感觉很玄学,之后认真看了一下代码才发现,如果按原来的代码

it=filter(_not_divisible(n), it)它传入的参数是n,而明显,lambda表达式it=filter(lambda x: x%n>0, it)

的参数是x 。。这样能出预期效果才是的玄学。

于是修改了一番it=filter(lambda n: x%n>0, it),这样运行之后发现也报错,而且错得更厉害,因为虽然解决了

n(其实没有解决)但是x又变成了一个奇怪的东西,再面向百度编程一番之后,找到了解决方法------

it=filter(lambda x,n=n: x%n>0, it),此时,x和n都作为参数传入,同时n也需要从外部赋值才能获取到(此处涉及

python中变量作用域,引用https://www.zhihu.com/question/61789798,中的说法,是python在处理lambda函数的

时候,变量的作用域被限制在了lambda函数外面,n对lambda函数内不可见,所以需要手动的方式n=n来获取,并

作为参数传入lambda函数)此时在运行程序,则成功使用lambda表达式替换了原来的函数:


PS:至于能否使用global(static)之类的全局变量来修饰n,进而直接在lambda函数中使用,因为水平有限,简

单的在n前面添加global试了几次都以报错告终,如果有哪位大佬知道应该如何使用还望不吝赐教,同时如果上文

有不对或不足也希望同学们指出,互相学习,共同进步


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值