原文: http://zetcode.com/python/lambda/

Python lambda 函数教程展示了如何在 Python 中创建匿名函数。 Python 中的匿名函数是使用lambda关键字创建的。

Python Lambda 函数

Python lambda 函数(也称为匿名函数)是没有名称的内联函数。 它们是使用lambda关键字创建的。 这是内置 Python 的函数示例的一部分。

Python lambda 函数仅限于单个表达式。 它们可以在可以使用常规函数的任何地方使用。

Python Lambda 语法

Python lambda 具有以下语法:

  1. z = lambda x: x * y

该语句使用lambda关键字创建一个匿名函数。 该函数将两个值相乘。 x是传递给 lambda 函数的参数。 参数后跟一个冒号。 冒号旁边的代码是调用 lambda 函数时执行的表达式。 lambda 函数分配给z变量。

Python Lambda 示例

以下是演示 Python lambda 函数的简单示例。

lambda_fun_simple.py

  1. #!/usr/bin/python3
  2. def square(x):
  3. return x * x
  4. sqr_fun = lambda x: x * x
  5. print(square(3))
  6. print(sqr_fun(4))

在示例中,我们有两个函数对一个值求平方。

  1. def square(x):
  2. return x * x

这是用def关键字定义的 Python 函数。 该函数的名称为square

  1. sqr_fun = lambda x: x * x

在这里,我们使用lambda定义了一个匿名的内联函数。 请注意,该函数没有名称。 sqr_fun是保存已创建的 lambda 函数的变量的名称。

  1. ./lambda_fun_simple.py
  2. 9
  3. 16

这是示例的输出。

Python Lambda 和map

Python lambda 函数可用于map()函数。 我们可以创建更简洁的代码。 Python map()是一个内置函数,该函数将给定函数应用于iterable的每一项,并返回一个迭代器对象。

lambda_fun_map.py

  1. #!/usr/bin/python3
  2. nums = [1, 2, 3, 4, 5, 6]
  3. nums_squared = map(lambda x: x * x, nums)
  4. for num in nums_squared:
  5. print(num)

该示例为map()创建一个 litle 内联函数作为参数。 使用map()函数,我们将 lambda 函数应用于列表的每个元素。

  1. $ ./lambda_fun_map.py
  2. 1
  3. 4
  4. 9
  5. 16
  6. 25
  7. 36

这是输出。

Python lambda 和filter

Python lambda 函数可以与filter()函数一起使用。 filter()函数根据可迭代的那些元素构造一个列表,这些元素为其返回true

lambda_fun_filter.py

  1. #!/usr/bin/python3
  2. nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
  3. nums_filtered = list(filter(lambda x: x % 2, nums))
  4. print(nums_filtered)

在示例中,我们过滤了整数列表。 新列表仅包含奇数整数。

  1. nums_filtered = list(filter(lambda x: x % 2, nums))

filter()的第一个参数是处理列表元素的函数。 lambda 函数具有x % 2表达式,对于奇数值返回true

  1. $ ./lambda_fun_filter.py
  2. [1, 3, 5, 7, 9, 11]

这是输出。

Python Lambda 和 Tkinter

Python lambda 函数可用于 Tkinter 的 GUI 编程中。 它允许为command参数创建小的内联函数。

  1. lambda_tkinter.py
  1. #!/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3. from tkinter import Tk, BOTH, messagebox
  4. from tkinter.ttk import Frame, Button
  5. class Example(Frame):
  6. def __init__(self, parent):
  7. Frame.__init__(self, parent)
  8. self.parent = parent
  9. self.initUI()
  10. def initUI(self):
  11. self.parent.title("Buttons")
  12. self.pack(fill=BOTH, expand=1)
  13. btn1 = Button(self, text="Button 1",
  14. command=lambda: self.onClick("Button 1"))
  15. btn1.pack(padx=5, pady=5)
  16. btn2 = Button(self, text="Button 2",
  17. command=lambda: self.onClick("Button 2"))
  18. btn2.pack(padx=5, pady=5)
  19. btn2 = Button(self, text="Button 3",
  20. command=lambda: self.onClick("Button 3"))
  21. btn2.pack(padx=5, pady=5)
  22. def onClick(self, text):
  23. messagebox.showinfo("Button label", text);
  24. def main():
  25. root = Tk()
  26. root.geometry("250x150+300+300")
  27. app = Example(root)
  28. root.mainloop()
  29. if __name__ == '__main__':
  30. main()

我们有三个按钮共享一个回调。 lambda 函数允许我们将特定数据发送到回调函数。 每个按钮在消息框中显示其标签。

  1. btn1 = Button(self, text="Button 1",
  2. command=lambda: self.onClick("Button 1"))

我们将匿名函数传递给command参数。 我们将按钮的标签发送到onClick()回调。

在本教程中,我们使用了 Python lambda 函数。

您可能也对以下相关教程感兴趣: Python 教程Python 集教程Python for循环Python 列表推导Python 映射教程OpenPyXL 教程Python Requests 教程Python CSV 教程