python - 如何在 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 ]
但是,这会返回语法错误。如何with
在lambda
表达式中使用语句?
我来自 Wolfram 语言,可以做到这一点。例如
With[{x2 = #^2, x3 = #^3},
{ (x2^3)*x3-x3 , x2, (x3-5)^x2 }
]&
我收集了这些仅在一小部分代码中需要的微小计算(在另一个函数中)。我想将这些作为 lambda 函数来选择和apply
/map
基于该函数中的特定条件。
解决方案
在 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)
但我不会屏住呼吸。这确实需要关键字的可读性,并且有很强的阻力——我承认这是有充分理由的——引入新的关键字或重载现有的关键字。)
推荐阅读
- node.js - 如何从 AWS Lambda ListFunctions API 获取与自己的过滤条件匹配的所需记录数量?
- c - 带有宏标识符的 FreeRTOS 静态数组声明
- python - 使用 WSL 2 的 VS Code 中的 Jupyter Notebook 不起作用
- android - 数据已插入,但不会使用 Room 检索
- c# - 串口连续数据读取
- spring - CorsWebFilter 不适用于分配有 hasAnyRole(...) 的安全路由,但适用于分配有 permitAll() 的安全路由
- mysql - 如何仅将 MySQL 权限授予特定行
- python - 正确访问嵌套 Python 字典的问题
- python - 导出到excel时如何设置列标题?
- swift - UITableView 中的最后一个单元格始终与表格中最高的单元格具有相同的高度?