V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanqieipnet
V2EX  ›  推广

Python Lambda 表达式(匿名函数)使用

  •  
  •   fanqieipnet · 2020-11-27 17:42:13 +08:00 · 653 次点击
    这是一个创建于 1271 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Lambda 表达式

      当我们需要做一些简单的事情并且更希望快速完成工作而不是正式命名函数时,Lambda 表达式是理想的选择。Lambda 表达式也称为匿名函数。

       Python 中的 Lambda 表达式是声明小型匿名函数的一种简短方式(没有必要为 Lambda 函数提供名称)。

       Lambda 函数的行为就像使用 def 关键字声明的常规函数一样。当您希望以简洁的方式定义一个小型函数时,它们就派上用场了。它们只能包含一个表达式,因此不适合具有控制流语句的函数。今天番茄加速讲一下 Python Lambda 表达式(匿名函数)使用方法。

       Lambda 函数的语法

       lambda arguments: expression

       Lambda 函数可以具有任意数量的参数,但只能有一个表达式。

      代码示例

      # Lambda 函数计算数字的平方

       square = lambda x: x ** 2

       print(square(3)) # 输出: 9

      # 传统函数计算数字的平方

       def square1(num):

       return num ** 2

       print(square(5)) # 输出: 25

      在上面的 lambda 示例中,lambda x: x ** 2 产生一个可以与任何名称关联的匿名函数对象。因此,我们将功能对象与关联 square 。因此,从现在开始,我们可以 square 像调用任何传统函数一样调用对象 square(10)

       Lambda 函数的示例

      初级

       lambda_func = lambda x: x**2 # 需要一个整数并返回其平方的函数

       lambda_func(4) # 返回 16

      中等

       lambda_func = lambda x: True if x**2 >= 10 else False

       lambda_func(3) # 返回 False

       lambda_func(8) # 返回 True

      复杂

       linuxmi_dict = {"X": 1, "Y": 2, "Z": 3}

       sorted(linuxmi_dict, key=lambda i: linuxmi_dict[i]%3) # 返回 ['Z', 'X', 'Y']

      用例

      假设您要从中过滤出奇数 list 。您可以使用 for 循环:

      >>> linuxmi_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

      >>> filtered = []

      >>> for num in linuxmi_list:

      ... if num % 2 != 0:

      ... filtered.append(num)

      ...

      >>> print(filtered) # Python 2: 打印 filtered

      [1, 3, 5, 7, 9, 11]

      或者你可以把它写成一个包含 List Comprehensions 即列表生成式的一行代码:

       filtered = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] if x % 2 != 0]

      但是您可能会想使用内置的 filter 数。为什么?第一个示例有点过于冗长,难以理解。但重要的是,内置函数通常更快。

      >>> linuxmi_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

      >>> filtered = filter(lambda i: i % 2 != 0, linuxmi_list)

      >>> list(filtered)

      [1, 3, 5, 7, 9, 11]

      注意:在 Python 3 中内置的函数会返回生成器对象,所以你必须调用 list 。另一方面,在 Python2 中,它们返回一个 list,tupleor 或 string 。

      所以发生了什么事?您告诉 filter 获取 linuxmi_list 中的每个元素并应用 lambda 表达式。返回 False 的值被过滤掉。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:29 · PVG 20:29 · LAX 05:29 · JFK 08:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.