最近学习到的python匿名函数lambda。MATLAB中也有匿名函数的用法,整理对比记录一下。
python lambda函数
lambda函数
python 使用 lambda 来创建匿名函数。
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
用法:
lambda 参数:表达式
举例:
g = lambda x:x+1
lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,等价于函数:
def g(x):
return x+1
filter()
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
filter()接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
注意:pyhton2返回列表,python3返回迭代器对象。因此在python3中如果要将filter后的结果返回列表,要加list。
filter(function, iterable)
第一个参数function即为判断过滤的条件,第二个参数iterable即待过滤的对象。
举例:
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
输出:
[1, 3, 5, 7, 9]
lambda函数+filter()
将lambda函数定义的功能作为过滤条件写在filter的第一个参数位置。
举例:
sec = "Reserved room information, floor:4F, room id:406, room id:408, room type:standard king size"
id = list(filter(lambda x: x.count("room id")>0, sec.split(",")))[0].split(":")[1]
print(id)
输出:
406
其中filter方法中,function参数如下,表示筛选的条件是字符串中包含"room id"子串。
lambda x: x.count("room id")>0
iterable参数如下,表示待筛选的列表
sec.split(",")
# ['Reserved room information', ' floor:4F', ' room id:406', ' room id:408', ' room type:standard king size room']
则语句
filter(lambda x: x.count("room id")>0, sec.split(","))
筛选出了一个包含满足要求的字符串的迭代器对象,要得到一个list的话,加list()转换。
list(filter(lambda x: x.count("room id")>0, sec.split(",")))
# ['room id:406', ''room id:408']
从筛选后的list中选取第一个元素
list(filter(lambda x: x.count("room id")>0, sec.split(",")))[0]
# 'room id:406'
通过‘:’分割字符串,选择第二个元素。
list(filter(lambda x: x.count("room id")>0, sec.split(",")))[0].split(":")[1]
# '406'
MATLAB lambda函数
这部分日后再补充。。。
版权声明:本文为qq_42001367原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。