🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Python Lambda 函数 > 原文: [http://zetcode.com/python/lambda/](http://zetcode.com/python/lambda/) Python lambda 函数教程展示了如何在 Python 中创建匿名函数。 Python 中的匿名函数是使用`lambda`关键字创建的。 ## Python Lambda 函数 Python lambda 函数(也称为匿名函数)是没有名称的内联函数。 它们是使用`lambda`关键字创建的。 这是内置 Python 的函数示例的一部分。 Python lambda 函数仅限于单个表达式。 它们可以在可以使用常规函数的任何地方使用。 ## Python Lambda 语法 Python lambda 具有以下语法: ```py z = lambda x: x * y ``` 该语句使用`lambda`关键字创建一个匿名函数。 该函数将两个值相乘。 `x`是传递给 lambda 函数的参数。 参数后跟一个冒号。 冒号旁边的代码是调用 lambda 函数时执行的表达式。 lambda 函数分配给`z`变量。 ## Python Lambda 示例 以下是演示 Python lambda 函数的简单示例。 `lambda_fun_simple.py` ```py #!/usr/bin/python3 def square(x): return x * x sqr_fun = lambda x: x * x print(square(3)) print(sqr_fun(4)) ``` 在示例中,我们有两个函数对一个值求平方。 ```py def square(x): return x * x ``` 这是用`def`关键字定义的 Python 函数。 该函数的名称为`square`。 ```py sqr_fun = lambda x: x * x ``` 在这里,我们使用`lambda`定义了一个匿名的内联函数。 请注意,该函数没有名称。 `sqr_fun`是保存已创建的 lambda 函数的变量的名称。 ```py ./lambda_fun_simple.py 9 16 ``` 这是示例的输出。 ## Python Lambda 和`map` Python lambda 函数可用于`map()`函数。 我们可以创建更简洁的代码。 Python `map()`是一个内置函数,该函数将给定函数应用于`iterable`的每一项,并返回一个迭代器对象。 `lambda_fun_map.py` ```py #!/usr/bin/python3 nums = [1, 2, 3, 4, 5, 6] nums_squared = map(lambda x: x * x, nums) for num in nums_squared: print(num) ``` 该示例为`map()`创建一个 litle 内联函数作为参数。 使用`map()`函数,我们将 lambda 函数应用于列表的每个元素。 ```py $ ./lambda_fun_map.py 1 4 9 16 25 36 ``` 这是输出。 ## Python lambda 和`filter` Python lambda 函数可以与`filter()`函数一起使用。 `filter()`函数根据可迭代的那些元素构造一个列表,这些元素为其返回`true`。 `lambda_fun_filter.py` ```py #!/usr/bin/python3 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] nums_filtered = list(filter(lambda x: x % 2, nums)) print(nums_filtered) ``` 在示例中,我们过滤了整数列表。 新列表仅包含奇数整数。 ```py nums_filtered = list(filter(lambda x: x % 2, nums)) ``` `filter()`的第一个参数是处理列表元素的函数。 lambda 函数具有`x % 2`表达式,对于奇数值返回`true`。 ```py $ ./lambda_fun_filter.py [1, 3, 5, 7, 9, 11] ``` 这是输出。 ## Python Lambda 和 Tkinter Python lambda 函数可用于 Tkinter 的 GUI 编程中。 它允许为`command`参数创建小的内联函数。 ```py lambda_tkinter.py ``` ```py #!/usr/bin/python3 # -*- coding: utf-8 -*- from tkinter import Tk, BOTH, messagebox from tkinter.ttk import Frame, Button class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Buttons") self.pack(fill=BOTH, expand=1) btn1 = Button(self, text="Button 1", command=lambda: self.onClick("Button 1")) btn1.pack(padx=5, pady=5) btn2 = Button(self, text="Button 2", command=lambda: self.onClick("Button 2")) btn2.pack(padx=5, pady=5) btn2 = Button(self, text="Button 3", command=lambda: self.onClick("Button 3")) btn2.pack(padx=5, pady=5) def onClick(self, text): messagebox.showinfo("Button label", text); def main(): root = Tk() root.geometry("250x150+300+300") app = Example(root) root.mainloop() if __name__ == '__main__': main() ``` 我们有三个按钮共享一个回调。 lambda 函数允许我们将特定数据发送到回调函数。 每个按钮在消息框中显示其标签。 ```py btn1 = Button(self, text="Button 1", command=lambda: self.onClick("Button 1")) ``` 我们将匿名函数传递给`command`参数。 我们将按钮的标签发送到`onClick()`回调。 在本教程中,我们使用了 Python lambda 函数。 您可能也对以下相关教程感兴趣: [Python 教程](/lang/python/), [Python 集教程](/python/set/), [Python `for`循环](/python/forloop/), [Python 列表推导](/articles/pythonlistcomprehensions/), [Python 映射教程](/python/map/), [OpenPyXL 教程](/articles/openpyxl/), [Python Requests 教程](/web/pythonrequests/)和 [Python CSV 教程](/python/csv/)。