我的问题是重新定义 +
-operator evaluating expression with ast.
我有一个表达式列表,很容易用 eval() 解析:
>>> expr = '1+2*3**4/5'
>>> print(eval(expr))
33.4
但我喜欢像这样重新定义列表和字典的 +
-运算符(加法):
expr = '[1,2,3]+[4,5,6]'
eval 的常规结果是
[1, 2, 3, 4, 5, 6]
但我想拥有
[5, 7, 9]
就像在 R 语言中一样。
同样的方法也适用于像这样的字典:
expr = "{'a':1, 'b':2} + {'a':3, 'b':4}"
我想拥有
{'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))
然后你可以这样做:
x = MyKindOfList([1, 2, 3])
y = MyKindOfList([4, 5, 6])
print (x + y) # prints [5, 7, 9]
关于Python:如何用ast重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51917400/