您可以在lambda中分配变量吗?

您可以在lambda中分配变量吗?,第1张

您可以在lambda中分配变量吗?

不,你不能。仅允许使用表达式

lambda

lambda_expr        ::=  "lambda" [parameter_list]: expressionlambda_expr_nocond ::=  "lambda" [parameter_list]: expression_nocond

你可以,但是,定义 第二

lambda
内部
lambda
,并立即与你想要的参数调用它。(这是否真的更好,可能是另一个问题。)

>>> a = lambda n: ((3+2*n), n*(3+2*n))  # for reference, with repetition>>> a(42)(87, 3654)>>> a2 = lambda n: (lambda b: (b, n*b))(3+2*n)  # lambda inside lambda>>> a2(42)(87, 3654)>>> a3 = lambda n: (lambda b=3+2*n: (b, n*b))()  # using default parameter>>> a3(42)(87, 3654)

当然,外部和内部lambda都可以具有多个参数,即,您可以一次定义多个“变量”。这种方法相对于例如在第一个lambda 之外
定义第二个lambda的好处是,您仍然可以使用原始参数(如果

a
使用
b
预先计算的调用则不可能),并且
b
只需要进行一次计算(而不是重复调用
b
内的计算函数
a
)。


另外,受链接问题的最高答案的启发,您还可以在lambda中将一个或多个变量定义为列表理解或生成器的一部分,然后

next
从该生成器或列表中获取(第一个也是唯一的)结果:

>>> a4 = lambda n: next((b, n*b) for b in [3+2*n])>>> a4(42)(87, 3654)

但是,我认为lambda-in-a-lambda背后的意图更加明确。最后,请记住,除了单行代码

lambda
,您还可以使用更清晰的三行
def
语句…


另外,从Python 3.8开始,将有赋值表达式,这 应该
使编写这样的东西成为可能。(请注意,由于我还没有Python 3.8,因此无法尝试/验证。)

>>> a5 = lambda n: ((b := 3+2*n), n*b))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5587711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存