重载+以支持元组

2023-12-22

我希望能够用 python 写这样的东西:

a = (1, 2)
b = (3, 4)
c = a + b # c would be (4, 6)
d = 3 * b # d would be (9, 12)

我意识到您可以重载运算符以与自定义类一起使用,但是有没有办法重载运算符以与对一起使用?

当然,诸如此类的解决方案

c = tuple([x+y for x, y in zip(a, b)])

确实有效,但是,抛开性能不谈,它们并不像超载那么漂亮+操作员。

当然可以定义add and mul函数如

def add((x1, y1), (x2, y2)):
    return (x1 + x2, y1 + y2)

def mul(a, (x, y)):
    return (a * x, a * y)

但仍然可以写q * b + r代替add(times(q, b), r)会更好。

Ideas?

EDIT: 顺便说一句,我意识到自从+目前映射到元组串联,重新定义它可能是不明智的,即使这是可能的。这个问题仍然成立-例如=)


与 Ruby 相比,您无法更改 Python 中内置类型的行为。你所能做的就是创建一个新类型derived来自内置类型。不过,文字仍然会创建内置类型。

也许你能得到的最好的就是

class T(tuple):
    def __add__(self, other):
        return T(x + y for x, y in zip(self, other))
    def __rmul__(self, other):
        return T(other * x for x in self)
a = T((1, 2))
b = T((3, 4))
c = a + b # c would be (4, 6)
d = 3 * b # d would be (9, 12)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重载+以支持元组 的相关文章

随机推荐

  • 从 F# 调用具有多个参数的 C# 函数

    打电话很方便f Func lt T T gt 从 F 为 T gt T通过使用f Invoke 但我该怎么打电话f Func lt T T T gt 从 F 为 T gt T gt T 当我使用f Invoke I get T T gt T
  • 尝试以 pdf 形式查看数据,pdf 为空白

    我试图在下一个选项卡中打开 pdf 文件 它打开但始终为空白 我正在从 springboot 中的文件夹中调用 pdf 文件 数据确实显示在控制台日志中 弹簧代码 RequestMapping value report method Req
  • 如何从源映射中获取原始行号和符号

    我正在记录我网站上的 javascript 错误 但文件已最小化 因此我无法获得有意义的行号 不过 我确实有源地图 是否有服务 脚本 npm 模块或任何可以帮助我将缩小版本中的行号 翻译 为有用的内容的东西 我使用这个 npm 模块找到了答
  • 实体框架和使用 WCF 服务

    我正在获取隐藏在 WCF 服务后面的数据库的数据 在我有来自 Web 服务的自定义对象的场景中是否可以使用实体框架 无法访问外部数据库 当前没有插入 更新 删除逻辑的计划 从空的 EF 模型开始并添加一个实体 我在编译时收到此错误 没有为
  • 如何使用 Spring Security 3.1 更改当前用户的登录名?

    我要求每个用户在保持登录状态时都可以更改自己的用户名 问题是如何更新用户名 Principal 在 Spring Security 的身份验证令牌中 我必须更新它 因为我在某些业务用例中使用身份验证令牌中的主体名称来识别用户 我使用基于表单
  • 字节从 py2 到 py3 的行为变化

    讨论发生后我很好奇这个问题 https stackoverflow com questions 18616657 how to encode integer in to base64 string in python 3 看来 的行为byt
  • 为什么在运行时更改 LD_LIBRARY_PATH 不会在加载可执行文件后反映到可执行文件上

    我正在尝试改变LD LIBRARY PATH来自我的 C 程序 我可以使用它来获取它的值getenv LD LIBRARY PATH 并使用设置其值setenv http man7 org linux man pages man3 sete
  • 如何使用 MinGW 创建微型 PE (Win32) 可执行文件

    我有以下 C 程序 include
  • 如何在执行脚本之前自动清除 VSCode 中的终端? [复制]

    这个问题在这里已经有答案了 我目前正在使用 VS Code 来学习 Python 所以我必须每分钟运行 10 15 次脚本 只是做一些小的编辑并学习所有的东西 我正在 VS code 的集成终端中运行脚本 所以显然终端变得非常混乱 我必须始
  • Anaconda 与 Python 有何关系?

    我是初学者 我想学习计算机编程 所以 现在我已经开始自学Python 并掌握了一些C和Fortran编程的知识 现在 我已经安装了Python 3 6 0版本 并且我一直在努力寻找合适的文本来学习这个版本的Python 甚至在线讲座系列也要
  • 类型转换和类型转换之间的区别? [复制]

    这个问题在这里已经有答案了 可能的重复 铸造和转换之间有什么区别 https stackoverflow com questions 3166840 what is the difference between casting and co
  • 将配置文件的内容读取到与其关联的 dll 中

    我已将字符串保存在 dll 应用程序的设置中 我想找回它们 这是我的 dll 的配置文件
  • 如果已命中断点 A,则启用断点 B

    我经常发现自己在代码中的某处设置断点 A 并在命中断点时手动启用一个或多个断点 一个典型的情况是当我正在调试单元测试并且不关心前面的测试时 void testAddZeros Number a 0 Number b 0 Number res
  • 给定 WSDL 的 Web 服务客户端

    我正在尝试用 Java 创建一个 Web 服务客户端 我不知道该怎么做 这是 WSDL 的 URL https testservices gatewayedi com PayerList payerlist asmx wsdl https
  • 合并多列,排除空值

    我试图弄清楚如何组合多个列 不包括 NA 值 输入数据框 data lt data frame id c 1 3 Item1 c Egg Item2 c Chicken Flour Item3 c Bread Item4 c Milk 所需
  • docker 中的 Plotly dash 不加载资源

    我有一个多页破折号应用程序 在本地运行时可以按预期工作 女服务员服务 listen 0 0 0 0 80 web app wsgi application 因此资产文件夹中的所有资产都正确加载 图像加载了src app get asset
  • 有没有更好的方法来计算中位数(而不是平均值)

    假设我有以下表定义 CREATE TABLE x i serial primary key value integer not null 我想计算的中位数value 不是AVG 中位数是将集合分为包含相同数量元素的两个子集的值 如果元素个数
  • Tensorflow Callback:如何将最佳模型保存在内存而不是磁盘上

    我使用 Tensorflow 使用以下函数进行回归 import tensorflow as tf def ff args kwargs model tf keras models Sequential model add tf keras
  • jQuery 对象和 DOM 元素

    我想了解 jQuery 对象和 DOM 元素之间的关系 当 jQuery 返回一个元素时 它显示为 object Object 在警报中 什么时候getElementByID返回一个显示为的元素 object HTMLDivElement
  • 重载+以支持元组

    我希望能够用 python 写这样的东西 a 1 2 b 3 4 c a b c would be 4 6 d 3 b d would be 9 12 我意识到您可以重载运算符以与自定义类一起使用 但是有没有办法重载运算符以与对一起使用 当