python - 改变解包操作符的行为
问题描述
在下文中,我将*
称为(拆包)运算符,我不确定它的名称。
一个简单的问题,例如计算元组列表的元素差异,让我想知道是否有一些使用*
-operator 的秘密方法。
理想情况下,我只想根据map
, 所以不:lambda
,列表推导,numpy
...
我的想法是尝试int.__sub__(*(3, 4))
通过一些 hacky 方式进行扩展:
a = [1, 2, 3]
b = [7, 10, 12]
pairs = zip(a, b)
print(list(map(int.__sub__, pairs)))
# TypeError: descriptor '__sub__' requires a 'int' object but received a 'tuple'
print(list(map(lambda p: int.__sub__(*p), pairs)))
# it works BUT used lambda
对于这样的问题,我提出了以下问题:
- 有没有办法通过模仿解包操作符的函数调用来“拦截” ?例如。有点儿
map(int.__sub__.unpacker, pairs)
或者
- 是否可以自定义
*
-operator?map(*(int.__sub__), pairs)
where*
充当“正确”运算符(或作为预组合)__*__
或者在哪里以及如何定义*
-operator?
我在文档*
中的 -operator 上找到的唯一参考
编辑感谢deceze这里使用的解决方案starmap
import itertools as it
list(it.starmap(int.__sub__, pairs))
解决方案
推荐阅读
- javascript - 如何从 Meteor.js 中的指定表行中获取值
- c - 函数参数列表中的符号“#”是什么意思?
- flutter - 在颤动应用程序的父 ListView 内的子 ListView 中滚动相关问题
- r - rmarkdown::render 在“Knit to html”按钮运行时提示错误。需要从脚本中编织
- batch-file - 批处理文件中的字符串断言/抛出异常
- java - OpenRefine 的 API:意外响应:HTTP/1.1 200 ok
- c++ - 矩阵/向量初始化性能
- java - 是否有可能从 Java 中的构造函数“返回”字符串值?
- java - java:Elasticsearch 异常 [type=mapper_parsing_exception, reason=Failed to parse mapping [_doc]
- kubernetes - 如何使用 Vault 动态机密并将它们作为环境变量注入 Kubernetes 部署?