对于常用功能,您可以按如下方式注释类型
def my_function(arg1: int)
我如何在lambda中这样做?
lambda a: int, b: int : a+b
给出语法错误。
答案 0 :(得分:9)
问题是:“如何在python lambda中指定参数类型?”。 虽然其他答案都很好,但他们没有回答这个主要问题。
答案是:你做不到。
来自PEP specification of function annotations:
lambda的语法不支持注释。通过在参数列表周围要求括号,可以更改lambda的语法以支持注释。然而,决定[12]不做出这种改变,因为:
这将是一个不相容的变化。 无论如何,Lambda都是绝育的。 lambda始终可以更改为函数。
答案 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)