如何在lambda中指定参数类型?

时间:2016-12-06 07:15:38

标签: python lambda

对于常用功能,您可以按如下方式注释类型

def my_function(arg1: int)

我如何在lambda中这样做?

lambda a: int, b: int : a+b

给出语法错误。

3 个答案:

答案 0 :(得分:9)

问题是:“如何在python lambda中指定参数类型?”。 虽然其他答案都很好,但他们没有回答这个主要问题。

答案是:你做不到。

来自PEP specification of function annotations

  

lambda的语法不支持注释。通过在参数列表周围要求括号,可以更改lambda的语法以支持注释。然而,决定[12]不做出这种改变,因为:

     

这将是一个不相容的变化。   无论如何,Lambda都是绝育的。   lambda始终可以更改为函数。

供参考:https://stackoverflow.com/a/33833896/7051394

答案 1 :(得分:1)

问题是reduce会计算

result1 = func(x1, x2)
result2 = func(result1, x3)
...

你的函数接受两个lists并返回一个数字,所以在第二次调用时函数失败(除非你只提供两个元素)。

为了能够使用reduce,该函数应该接受两个参数并返回相同类型的参数的值,因为该函数的输出将被重用作输入在下一次迭代。

答案 2 :(得分:0)

对于您的特定问题,让我们看看reduce的工作原理:

lambda a, b : a[0] + b[0]

此处,a是上一次迭代的结果,b是当前元素。

现在,让我们看看你的节目:

functools.reduce(lambda a, b : a[0] + b[0], [[0,1], [2,3]])

详细说明:

iter #1: a = [0,1], b = [2,3], so, a[0] + b[0] = 0 + 2 =3 

有效。

但是当你这样做时:

functools.reduce(lambda a, b : a[0] + b[0], [[0,1], [2,3], [4,5]]) 

详细说明:

iter #1: a = [0,1], b = [2,3], so, a[0] + b[0] = 0 + 2 =3 
iter #2: a = 3, b = [4,5], so, a[0] + b[0] = Error, as you can't subscript an integer `3` (3[0] > Error). 

错误再生:

>>> a = 1
>>> a[0]
  

追踪(最近一次通话):         文件“”,第1行,in       TypeError:'int'对象不可订阅

您可以通过以下方式获得所需的结果:

a = [[0,1], [2,3], [4,5]]
print sum(map(lambda x:x[0],a))

或者,

print sum(i[0] for i in a)