Python学习笔记:lambda函数


最近学习到的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版权协议,转载请附上原文出处链接和本声明。