Python走一步看一步——filter&lambda

Python走一步看一步——filter&lambda

python中filter和lambda用法

第一次用不太会用,就当自己mark一下吧。果然比起敲代码读代码。。。更想去拯救艾欧泽亚。。。或者去德玛西亚当召唤师。。。切入正题吧!

filter

filter(function, iterable)我觉得第一个参数是过滤函数,第二个是要过滤序列参数。举一个小栗子:

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)

输出结果:[1, 3, 5, 7, 9]
这是网上最普遍简单易懂的栗子啦,希望不会算是侵权。。。。但是本豆芽觉得前面的过滤函数还要定义有些啰嗦,有没有啥解决的方法呢?事实上是有的,就用到了lambda。

lambda

个人的理解,lambda就像是小型的匿名def,大家通过这两个代码片段体会一下:

withopen('data/logistic_regression.txt', 'r') as f:
	data_list = [i.split('\n')[0].split(',') for i in f.readlines()]
	data = [(float(i[0]), float(i[1]), float(i[2])) for i in data_list]
x0_max = max([i[0] for i in data])
x1_max = max([i[1] for i in data])
data = [(i[0]/x0_max, i[1]/x1_max, i[2]) for i in data]
x0 = list(filter(lambda x: x[-1] == 0.0, data))

身为豆芽的我第一眼看过去那是一眼蒙蔽额。。实际上他是想把data最后一列为0的过滤出来。如果部分代码这么改我可能就懂了。。

def divide(n):
	return n[-1] == 0.0
x0 = list(filter(divide, data))

当然lambda和def肯定是有区别的啦。

  1. lambda可以定义一个匿名函数,而def定义的函数必须有一个名字。这应该是lambda与def两者最大的区别。
  2. lambda是一个表达式,而不是一个语句(lambda is an expression, not a statement.) 因此,lambda能够出现在Python语法不允许def出现的地方——例如,在一个列表常量中或者函数调用的参数中。
  3. lambda的主体是一个单个的表达式,而不是一个代码块。(lambda’s body is a single expression, not a block of statements.),lambda里面的语句相当于def中return中的代码一样。只能是简单的表达式,所以说lambda的能力小于def,在lambda中只能使用简单的语法,不能使用if else while return等语句。

所以lambda的设计理念为:lambda是一个为编写简单的函数而设计的,而def用来处理更大的任务。(lambda is designed for coding simple functions, and def handles larger tasks.)
就到这里啦。。拯救我的艾欧泽亚去啦~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值