python中lambda的用法

news/2025/3/31 18:52:30/

1. lambada简单介绍

lambda 在Python编程中使用的频率非常高,我们通常提及的lambda表达式其实是python中的一类特殊的定义函数的形式,使用它可以定义一个匿名函数。即当你需要一个函数,但又不想费神去命名一个函数,这时候,就可以使用 lambda了。
看个例子:

g = lambda x: x+1  # 求 x+1 的和

结果

>>> g(1)
2
>>> g(2)
3

可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:

def g(x):return x+1

以上可以看出,lambda 表达式使得代码更为紧凑,但理解起来却没有定义函数那么看起来直白易懂。因此,关于使不使用 lambda表达式一直存在争议,就看个人选择了。

2. lambda 语法

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

其中,lambda是Python预留的关键字,arg和expression由用户自定义。
代码示例

# 普通python函数
def func(a,b,c):return a+b+cprint func(1,2,3)
# 结果为 6# lambda匿名函数
f = lambda a,b,c: a+b+cprint f(1,2,3)
# 结果为 6# 在代码:f = lambda a,b,c: a+b+c 中,lambda表示匿名函数,
# 冒号 “:”之前的a,b,c表示它们是这个函数的参数。
# 匿名函数不需要return来返回值,表达式本身结果就是返回值。

3. lambda 函数的示例

1. 无参匿名函数:

>>> t = lambda : True  # 分号前无任何参数
>>> t()
True

等价于下面的def定义的函数

>>> def func(): 
...     return True
...
>>> func()
True

2. 带参数匿名函数

>>> lambda x: x**3  # 带有一个参数>>> lambda x, y, z: x+y+z # 带有多个参数>>> lambda x, y=3: x*y  # 存在默认值的参数

3. 输入任意个数的参数

>>> lambda *z: z  # *z传入的是任意个数的参数

4. 输入带键值对的参数

>>> lambda **arg: arg  # **arg传入的是带键值对的参数

4. lambda函数的用法

4.1 将函数赋值给一个变量,然后再像一般函数调用

>>> f = lambda x, y, z: x*y*z
>>> f(2,3,4)
24

4.2 直接在lambda表达式后面传递实参

>>> (lambda x, y: x if x>y else y)(1, 2)
2
# 判断字符串是否以某个字母开头
>>> print(lambda x: x.startswith('B'))('Bob')
True

4.3 将lambda嵌套到普通函数中,lambda函数本身做为return的值

代码示例

>>> def add(n):
... 	return lambda x: x+n
...
>>> f = add(1)
>>> f(2)
3

例题1. 字符串拼接

>>> f = (lambda x="I",y="Come",z="Here": x+y+z)
>>> f("You")
'YouComeHere'

例题2. 和列表结合使用

>>> L = [lambda x: x**2,\lambda x: x**3,\lambda x: x**4]
>>> for x in L:
... 	print x(2)
...
4
8
16

也可以像下面这样调用

>>> print L[0](2)
4

例题3. 和字典结合使用

>>> key = 'B'
>>> dic = { 'A': lambda: 2*2,\
... 		'B': lambda: 2*4,\
... 		'C': lambda: 2*6}
>>> dic[key]()
8

例题4. 求最小值

>>> lower = lambda x, y: x if x<y else y
>>> lower(1, 2)
1

4.4 将lambda函数作为参数传递给其他函数

1. 结合 map 函数使用

此时lambda函数用于指定对列表中每一个元素的共同操作

代码示例

# 求两个列表元素的和>>> a = [1,2,3,4]
>>> b = [5,6,7,8]
>>> list(map(lambda x, y: x+y, a, b))
[6, 8, 10, 12]
>>> squares = map(lambda x: x**2, range(5))
>>> list(squares)
[0, 1, 4, 9, 16]
# 求字符串每个单词的长度 
>>> sentence = "Hello World"
>>> words = sentence.split()
>>> lengths = map(lambda x: len(x), words)
>>> list(lengths)
[5, 5]# 写成一行:
>>> list(map(lambda x:len(x),'Hello World'.split()))

2. 结合filter函数使用

此时lambda函数用于指定过滤列表元素的条件

代码示例

# 筛选偶数
>>> list(filter(lambda x: x%2==0,  [1,2,3,4,5,6]))
[2, 4, 6]# 等价于下面的列表推导式
>>> l = [x for x in [1,2,3,4,5,6] if x%2==0]
>>> l
[2, 4, 6]
# 选出以 B 开头的名字
>>> names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara']
>>> name= filter(lambda x: x.startswith('B'), names)
>>> list(name)
['Bob', 'Barbara']

3. 和 filter函数和map函数结合使用

代码示例

>>> squares = map(lambda x: x**2, range(10))
>>> filters = filter(lambda x: x>5 and x<50, squares)
>>> list(filters)
[9, 16, 25, 36, 49]

4. 结合sorted函数使用

此时lambda函数用于指定对列表中所有元素进行排序的准则

代码示例

>>> info = [('James',32), ('Alies',20), ('Wendy',25)]
>>> sorted(info, key=lambda age:age[1])  # 按照第二个元素,索引为1排序
[('Alies', 20), ('Wendy', 25), ('James', 32)]

5. 结合 reduce函数使用

此时lambda函数用于指定列表中两两相邻元素的结合条件。

代码示例

>>>def add(x, y) : # 两数相加
...    return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15

注意事项

lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

如果可以使用for…in…if来完成的,坚决不用lambda。

如果使用lambda,lambda内不要包含循环,如果有,应定义函数来完成,使代码获得可重用性和更好的可读性。

lambda 是为了减少单行函数的定义而存在的。


http://www.ppmy.cn/news/970169.html

相关文章

python中key=lambda_python中Lambda表达式详解

如果你在学校读的是计算机科学专业&#xff0c;那么可能学过 Lambda 表达式&#xff0c; 不过可能从来没有用过它。如果你不是计算机科学专业&#xff0c;它们看着可能 有点儿陌生(或者只是“曾经学习过的东西”)。在这一节里&#xff0c;虽然我们 不打算深入学习这类函数&…

Java之Lambda表达式详解

Lambda 表达式&#xff0c;也可称为闭包&#xff0c;它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 一、lambda 表达式的语法格式如下&#…

The Lambda Calculus and Combinators

Combinatory logic and lambda-calculus, originally devised in the 1920s, have since developed into linguistic tools, especially useful in programming languages. The λ-calculusCombinatory logicThe power of λ and CLComputable functionsUndecidabilityFormal …

Java中的Lambda表达式

Java中的Lambda表达式 含义&#xff1a; Lambda 表达式&#xff0c;也可称为闭包&#xff0c;它是推动 Java 8 发布的最重要新特性。 Lambda 表达式是使用最小可能语法编写的函数定义&#xff1a; Lambda 表达式产生函数&#xff0c;而不是类。 虽然在 JVM&#xff08;Java Vir…

Lambda方式创建多线程

Lambda方式创建多线程 一、Lambda表达式的标准格式 Lamdba创建线程&#xff0c;是对匿名内部类创建多线程的简化 由三部分组成&#xff1a; a、一些参数b、一个箭头c、一段代码格式&#xff1a; &#xff08;参数列表&#xff09;->{一些重写方法的代码}解释说明…

lambda表达式filter使用

filter经常使用到,作为一个积累,直接贴代码 实体类 public class User implements Serializable {private String name;private Integer age;private String address;private BigDecimal balance;private Date createTime;public String getName() {return name;}public void…

JAVA Lambda表达式过滤

1. list字符串去重List<String> unique list.stream().distinct().collect(Collectors.toList());2.集合对象去重// Person 对象 public class Person {private String id;private String name;private String sex;<!--省略 get set--> }// 根据name去重 List<…

python lambda 判断_关于 Python中lambda 使用

在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda? 下面就上面的问题进行一下解答。 1、lambda是什么? 看个例子: 1 g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>>3 当然,你也…