不,你不能。 lambda 中只允许使用表达式:
lambda_expr ::= "lambda" [parameter_list]: expression
lambda_expr_nocond ::= "lambda" [parameter_list]: expression_nocond
但是,您可以在lambda 中定义 second lambda inside 并立即使用所需的参数调用它。 (这是否真的更好可能是另一个问题。)
>>> 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 outside 中定义第二个 lambda,您仍然可以使用原始参数(如果您使用 b pre-调用 a 则不可能)计算)并且您只需对b 进行一次计算(除了在a 内重复调用计算b 的函数)。
此外,受top answer to the linked question 的启发,您还可以在 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 开始,将会有 assignment expressions,应该可以编写这样的东西。 (请注意,由于我还没有 Python 3.8,因此我无法尝试/验证这一点。)
>>> a5 = lambda n: ((b := 3+2*n), n*b))