Python:定义我自己的运算符?
- 2025-01-22 08:45:00
- admin 原创
- 71
问题描述:
我想定义自己的运算符。python 支持这样的功能吗?
解决方案 1:
虽然从技术上讲,你不能在 Python 中定义新的运算符,但这个巧妙的技巧可以解决这个限制。它允许你像这样定义中缀运算符:
# simple multiplication
x=Infix(lambda x,y: x*y)
print 2 |x| 4
# => 8
# class checking
isa=Infix(lambda x,y: x.__class__==y.__class__)
print [1,2,3] |isa| []
print [1,2,3] <<isa>> []
# => True
解决方案 2:
不,Python 带有一组预定义但可覆盖的运算符。
解决方案 3:
不,您不能创建新的运算符。但是,如果您只是评估表达式,则可以自己处理字符串并计算新运算符的结果。
解决方案 4:
Sage 提供了此功能,本质上使用了 @Ayman Hourieh 描述的“聪明的黑客”,但作为装饰器合并到模块中以提供更简洁的外观和附加功能——您可以选择要重载的运算符,从而选择评估顺序。
from sage.misc.decorators import infix_operator
@infix_operator('multiply')
def dot(a,b):
return a.dot_product(b)
u=vector([1,2,3])
v=vector([5,4,3])
print(u *dot* v)
# => 22
@infix_operator('or')
def plus(x,y):
return x*y
print(2 |plus| 4)
# => 6
请参阅Sage 文档和此增强跟踪票以了解更多信息。
解决方案 5:
@
Python 3.5 引入了额外运算符的符号。
PEP465引入了此新的矩阵乘法运算符,以简化许多数值代码的表示法。此运算符不会为所有类型实现,而只为类数组对象实现。
您可以通过实现来为您的类/对象支持该运算符__matmul__()
。
PEP 为非数组类对象的运算符的不同用法留出了空间。
当然,@
对于类似数组的对象,您也可以使用任何不同于矩阵乘法的运算来实现,但用户体验会受到影响,因为每个人都期望您的数据类型以不同的方式运行。
解决方案 6:
如果您打算将操作应用于特定类别的对象,则可以重写与您的函数最接近的运算符...例如,重写__eq__()
将重写==
运算符以返回您想要的任何内容。这适用于几乎所有运算符。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD