【Python入门教程】第26篇 Lambda表达式
2022/1/18 20:08:02
本文主要是介绍【Python入门教程】第26篇 Lambda表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本篇我们介绍 Python lambda 表达式,以及如何使用它来编写匿名函数。
lambda 表达式概述
有时候,我们想要编写由单个表达式组成的简单函数,而且我们只需要使用该函数一次。这种情况下没有必要使用 def 关键字定义一个函数,可以利用 lambda 表达式简化整个过程。
Python lambda 表达式可以用于创建一个匿名函数,匿名函数就是没有名字的函数。当我们只需要调用一次函数时,匿名函数非常有用。
lambda 表达式通常包含一个或多个函数,但是它只能包含一个表达式。以下是 lambda 表达式的语法:
lambda parameters: expression
它等价于以下函数(没有名字“anonymous”):
def anonymous(parameters): return expression
lambda 表达式示例
在 Python 中,我们可以将一个函数作为参数传递给另一个函数,或者从一个函数中返回另一个函数。
示例一:使用函数作为参数
以下示例定义了一个 get_full_name() 函数,她可以基于姓氏和名字创建格式化的姓名:
def get_full_name(first_name, last_name, formatter): return formatter(first_name, last_name)
函数 get_full_name() 包含三个参数:
- 名字(first_name)
- 姓氏(last_name)
- 用于格式化姓名的函数(formatter)。格式化参数又包含名字和姓氏两个参数。
以下示例定义了两个基于名字和姓氏返回不同格式的姓名的函数:
def first_last(first_name, last_name): return f"{first_name} {last_name}" def last_first(first_name, last_name): return f"{last_name}, {first_name}"
接下来的代码使用名字、姓氏以及 first_last / last_first 函数调用 get_full_name() 函数:
full_name = get_full_name('John', 'Doe', first_last) print(full_name) # John Doe full_name = get_full_name('John', 'Doe', last_first) print(full_name) # Doe, John
输出的结果如下:
John Doe Doe, John
除了定义 first_last 和 last_first 函数之外,我们也可以使用 lambda 表达式实现相同的结果。例如,我们可以使用以下 lambda 表达式替代 first_last 函数:
lambda first_name,last_name: f"{first_name} {last_name}"
以上 lambda 表达式接受两个参数并且将它们按照 first_name 加上空格以及 last_name 的格式进行连接。
同理,以下 lambda 表达式可以替代 last_first 函数:
lambda first_name, last_name: f"{last_name} {first_name}";
通过使用 lambda 表达式,我们可以这样调用 get_full_name() 函数:
def get_full_name(first_name, last_name, formatter): return formatter(first_name, last_name) full_name = get_full_name( 'John', 'Doe', lambda first_name, last_name: f"{first_name} {last_name}" ) print(full_name) full_name = get_full_name( 'John', 'Doe', lambda first_name, last_name: f"{last_name} {first_name}" ) print(full_name)
输出结果如下:
John Doe Doe, John
示例二:返回函数的函数
下面的 times() 函数返回了一个函数,也就是一个 lambda 表达式:
def times(n): return lambda x: x * n
以下示例调用了 times() 函数:
double = times(2)
因为 times() 函数的返回值是一个函数,因此 double 也是一个函数。接下来我们调用该函数:
result = double(2) print(result) result = double(3) print(result)
输出结果如下:
4 6
以下是另一个使用 times() 函数的示例:
triple = times(3) print(triple(2)) # 6 print(triple(3)) # 9
循环语句中的 lambda 表达式
我们来看以下示例:
callables = [] for i in (1, 2, 3): callables.append(lambda: i) for f in callables: print(f())
以上代码的执行过程如下:
- 首先,定义一个名为 callables 的列表。
- 然后,遍历 1 到 3,每次创建一个新的 lambda 表达式并将其添加到列表 callables。
- 最后,遍历列表 callables 调用每个函数。
我们期望的输出结果如下:
1 2 3
不过,实际的输出结果如下:
3 3 3
问题在于三个 lambda 表达式都引用了变量 i,而不是 i 的当前值。当我们调用 lambda 表达式时,变量 i 的值为 3。
为了解决这个问题,我们需要在创建 lambda 表达式时将变量 i 的值进行绑定。方法之一就是使用默认参数:
callables = [] for i in (1, 2, 3): callables.append(lambda a=i: a) for f in callables: print(f())
在上面的示例中,变量 a 在 lambda 表达式创建时赋值。因此,程序返回了期望的结果。
总结
- lambda 表达式可以创建匿名函数。
- lambda 表达式接受一个或多个参数,包含一个表达式并返回该表达式的值。
- 使用 lambda 表达式将匿名函数传递给其他函数,或者从一个函数中返回其他函数。
这篇关于【Python入门教程】第26篇 Lambda表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础
- 2024-09-2610 种方法写出更好的 Python 代码
- 2024-09-25Python编程基础详解
- 2024-09-25Python编程入门教程
- 2024-09-25从零开始使用Python构建LLaMA 3
- 2024-09-23Python中理解和使用树形结构的简单教程
- 2024-09-23Python 编程基础入门
- 2024-09-18初探Python股票自动化交易:入门指南
- 2024-09-18Python量化入门:轻松掌握量化分析基础与实战