是否有辦法對內在型別的運算子進行多載?
示例:比如我想為function類多載__mul__運算子:
def u(x)。return cos(x)
def v(x)。return sin(x)
w = u*v # function x -> cos(x)*sin(x)/span>
如果我沒有使用正確的術語,請原諒。
uj5u.com熱心網友回復:
你不能改變內置的型別,但是你可以寫一個包裝類,它的行為方式是你想要的:
class FuncWrapper。
def __init__(self, f):
self.f = f
def __call__(self, x):
return self.f(x)
def __mul__(self, other):
return FuncWrapper(lambda x: self(x) * other(x) )
你可以直接使用它,或者作為一個裝飾器:
你可以直接使用它。
>>> from math import sin, cos
>>> sin, cos = FuncWrapper(sin), FuncWrapper(cos)
>>> (sin * cos)(1)
0.4546487134128409
>>> @FuncWrapper
... def func1(x)。
... return x 1
...
>>> @FuncWrapper
... def func2(x)。
... return x 2
...
>>> func3 = func1 * func2
>>> func3(5)
42
uj5u.com熱心網友回復:
一種方法是使用sympy
>>> import sympy
>>> x = sympy.Symbol('x'/span>)
>>> u = sympy.cos(x)
>>> v = sympy.sin(x)
>>> u
cos(x)
>>> v
sin(x)
然后
>>> w = u*v
>>> w = u*v
sin(x)*cos(x)
>>> w.subs(x, 0.5)
0.420735492403948
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/333364.html
標籤:
上一篇:需要RegEx來替換雙引號外的所有逗號,并在python中用|-替換。
下一篇:如何播放通過檔案輸入加載的音頻
