跳转至

Python Lambda 函数

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

Python Lambda 函数

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

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

Python Lambda 语法

Python lambda 具有以下语法:

z = lambda x: x * y

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

Python Lambda 示例

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

lambda_fun_simple.py
#!/usr/bin/python3

def square(x):

    return x * x

sqr_fun = lambda x: x * x

print(square(3))
print(sqr_fun(4))

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

1
2
3
def square(x):

    return x * x

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

sqr_fun = lambda x: x * x

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

1
2
3
 ./lambda_fun_simple.py 
9
16

这是示例的输出。

Python Lambda 和map

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

lambda_fun_map.py
1
2
3
4
5
6
7
8
#!/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 函数应用于列表的每个元素。

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

这是输出。

Python lambda 和filter

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

lambda_fun_filter.py
1
2
3
4
5
6
7
#!/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)

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

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

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

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

这是输出。

Python Lambda 和 Tkinter

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

lambda_tkinter.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 函数允许我们将特定数据发送到回调函数。 每个按钮在消息框中显示其标签。

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

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

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