首页 > 解决方案 > 如何在 Python 的 lambda 表达式中使用 with 语句

问题描述

我正在使用 Python 3.5.2(用于 MS SQL Server 机器学习服务的版本)。我想要一个lambda使用 with 的表达式,这样就不会在元组中重复昂贵的计算。一个最小的例子是

lambda x : 
  with x**2 as x2, x**3 as x3 :
    [ (x2**3)*x3-x3 , x2, (x3-5)**x2 ]

但是,这会返回语法错误。如何withlambda表达式中使用语句?

我来自 Wolfram 语言,可以做到这一点。例如

With[{x2 = #^2, x3 = #^3},
  { (x2^3)*x3-x3 , x2, (x3-5)^x2 }
]&

我收集了这些仅在一小部分代码中需要的微小计算(在另一个函数中)。我想将这些作为 lambda 函数来选择和apply/map基于该函数中的特定条件。

标签: pythonpython-3.xlambdawith-statement

解决方案


在 Python 3.8 中,您可以编写

lambda x: [ (x2 := x**2) * (x3:=x**3) - x3, x2, (x3 - 5) ** x2 ]

但是,这并不是很可读。我仍然会使用一条def语句来定义一个命名函数,如https://stackoverflow.com/a/57976808/1126841所示。

(也许未来的 Python 版本会找到一种方法来支持函数式的 let 表达式,例如

let x2 := x**2, x3 := x**3 in (x2*x3 - x3, x2, (x3-5) ** x2)

但我不会屏住呼吸。这确实需要关键字的可读性,并且有很强的阻力——我承认这是有充分理由的——引入新的关键字或重载现有的关键字。)


推荐阅读