【问题标题】:Lambda function with 3 arguments in PythonPython 中带有 3 个参数的 Lambda 函数
【发布时间】:2019-08-03 11:01:27
【问题描述】:

我正在使用 lambda 函数来检查最大值,传递 3 个参数

from functools import reduce

# function to check bigger item
f = lambda a,b,c: a if (a > b) else (b if (b > c) else c)

# reduce function
reduce(f, [47, 11, 42, 102, 13])

但是我收到这样的错误


TypeError Traceback(最近一次调用最后一次)

5 
6 # reduce function
7 reduce(f, [47, 11, 42, 102, 13, 21])

TypeError: <lambda>() missing 1 required positional argument: 'c'

【问题讨论】:

  • 你认为reduce通过了多少个参数?你实际上是在传递 3 个参数吗? (如果您认为它不应该这样工作,请考虑一下。lambda 只是一种编写函数的方法,但任何函数都可以工作。为什么要 reduce 内省为传递参数数量的函数?)
  • reduce 函数需要/比较 2 个项目,而不是 3 个

标签: python python-3.x lambda


【解决方案1】:

如果您要查找列表中最大的元素,一次比较三个元素的工作方式与一次比较两个元素的工作方式相同。这两种方式花费相同的时间。即使您创建了一个像reduce 这样的函数但一次需要3个元素,您的想法也存在缺陷,因为如果列表由4或6或8个或...元素组成怎么办,它仍然无法工作如你所料。

from functools import reduce

# function to check bigger item
g = lambda a,b: a if (a > b) else b 
f(1,3,4)
# reduce function
reduce(g, [47, 11, 42, 102, 13])

【讨论】:

    【解决方案2】:

    发件人:https://docs.python.org/3/library/functools.html

    functools.reduce(function, iterable[, initializer])

    两个参数的函数从左到右累加到序列项上,从而将序列缩减为单个值。

    因此,reduce 是为具有 2 个参数的函数而设计的。

    【讨论】:

      【解决方案3】:

      使用内置函数 max 检查最大值:

      max([47, 11, 42, 102, 13])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        • 2012-09-27
        • 2020-01-23
        相关资源
        最近更新 更多