如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
fanqieipnet
V2EX  ›  推广

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

  •  
  •   fanqieipnet · Nov 27, 2020 · 1049 views
    This topic created in 1996 days ago, the information mentioned may be changed or developed.
    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 的值被过滤掉。
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2782 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 11:32 · PVG 19:32 · LAX 04:32 · JFK 07:32
    ♥ Do have faith in what you're doing.