Lambda 无效语法
Posted
技术标签:
【中文标题】Lambda 无效语法【英文标题】:Lambda invalid syntax 【发布时间】:2019-03-19 11:22:21 【问题描述】:这个:
add = lambda x, y: x += y
给予:
SyntaxError: 无效语法
我的任务是能够使用 1 个函数和 2 个 lambda 函数对 1-513 之间的每个数字进行乘法运算或相加。因此,如果您有任何有用的建议。
【问题讨论】:
x += y
是一个语句,而不是一个表达式。 lambda
s 只能包含表达式。请改用lambda x, y: x+y
。
Why doesn't print work in a lambda?的可能重复
【参考方案1】:
正如大家所说,你应该在 lambda body 中放置一个表达式而不是一个语句,也许这会对你有所帮助:
from functools import reduce
add = lambda x,y: reduce(lambda i,j:i+j, range(x,y))
对于mul
:
mult = lambda x,y: reduce(lambda i,j:i*j, range(x,y))
或者你可以不用reduce
,换成add
:
add = lambda x,y: sum(range(x,y))
另外,您可以像这样使用operator
:
from operator import mul
from functools import reduce
mult = lambda x,y: reduce(mul, range(x,y), 1)
【讨论】:
【参考方案2】:对于继续乘法,这是有效的:
f = lambda n1, n2: n2 * (f(n1, n2-1) if n2 > 1 else 1)
print('f(1, 5) =', f(1, 5))
这个输出:
f(1, 5) = 120
(1 * 2 * 3 * 4 * 5 = 120)
【讨论】:
以上是关于Lambda 无效语法的主要内容,如果未能解决你的问题,请参考以下文章
KotlinKotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )
KotlinKotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )