Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 代数结构类的标准接口_Python_Types_Algebra_Abc - Fatal编程技术网

Python 代数结构类的标准接口

Python 代数结构类的标准接口,python,types,algebra,abc,Python,Types,Algebra,Abc,Python类的代数结构应该实现的接口是否已经有任何标准?我想让我的代码更通用 例如,数字和方阵都是带乘法和一的半群。如果它们实现返回*的标识元素的.one()方法,我可以通过对两个类的对象进行平方运算来实现指数运算: def exp_by_squaring(x, n): result = x.one() # <-- while n > 0: if n % 2 == 1: result *= x x = x *

Python类的代数结构应该实现的接口是否已经有任何标准?我想让我的代码更通用

例如,数字和方阵都是带乘法和一的半群。如果它们实现返回
*
的标识元素的
.one()
方法,我可以通过对两个类的对象进行平方运算来实现指数运算:

def exp_by_squaring(x, n):
    result = x.one() # <--
    while n > 0:
        if n % 2 == 1:
            result *= x
        x = x * x
        n = n // 2
    return result
def exp_by_squaring(x,n):
结果=x.one()#0:
如果n%2==1:
结果*=x
x=x*x
n=n//2
返回结果
此外,该函数可以很好地处理任何类的对象,这些对象是带乘法和1的半群(假定该类实现了这样的接口),无论它们是否为数字


我知道,我可以为此目的引入自己的接口(正如我在示例中所做的),但我希望坚持使用现有的解决方案(如果可能)。

这就是您想要的吗?对象本身没有标识,组有标识。如果给函数一个int对象,它会返回什么?你不知道你是在寻找乘法、加法或其他运算符下的恒等式。@L-Jones9:我想不是。符号计算不是我想要的。但是谢谢。你不能修改内置的。如果您想这样做,最接近的方法就是为它们创建一个具有所需属性的包装器类。在这一点上,手动输入值可能更容易一些。我现在理解了您的问题-我不知道有任何标准api可以为指定类型获得与1基本相同的值。尽管你可能想重新措辞,尽可能少用行话,这样如果有人确实有你想要的答案,他们就更有可能确定这就是你想要的。这就是你想要的吗?对象本身没有标识,组有标识。如果给函数一个int对象,它会返回什么?你不知道你是在寻找乘法、加法或其他运算符下的恒等式。@L-Jones9:我想不是。符号计算不是我想要的。但是谢谢。你不能修改内置的。如果您想这样做,最接近的方法就是为它们创建一个具有所需属性的包装器类。在这一点上,手动输入值可能更容易一些。我现在理解了您的问题-我不知道有任何标准api可以为指定类型获得与1基本相同的值。尽管你可能希望将问题的措辞改为尽可能少一些行话,这样如果某人确实有你要找的答案,他们就更有可能确定这就是你要找的。