Raf*_*ele 2 python overloading abstract-syntax-tree
我的问题是重新+定义 - 运算符用ast评估表达式.我有一个表达式列表,使用eval()很容易解决:
>>> expr = '1+2*3**4/5'
>>> print(eval(expr))
33.4
Run Code Online (Sandbox Code Playgroud)
但我喜欢重新定义+-operator(添加)列表和dict,如下所示:
expr = '[1,2,3]+[4,5,6]'
Run Code Online (Sandbox Code Playgroud)
eval的常规结果是
[1,2,3,4,5,6]
但我想拥有
[5,7,9]
喜欢用R语言.
对于这样的字典,这同样适用:
expr = "{'a':1, 'b':2} + {'a':3, 'b':4}"
Run Code Online (Sandbox Code Playgroud)
我想要
{'a':4,'b':6}
简而言之,我认为要替换普通的add函数,即当操作数是list或dict正确的动作时.
我试图用ast和NodeTransformer,但没有成功.有人可以帮帮我吗?
创建自己的列表类并在其上定义加法运算符:
class MyKindOfList(list):
def __add__(self, other):
return MyKindOfList(a + b for a, b in zip(self, other))
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
x = MyKindOfList([1, 2, 3])
y = MyKindOfList([4, 5, 6])
print (x + y) # prints [5, 7, 9]
Run Code Online (Sandbox Code Playgroud)