gpt4 book ai didi

Python:如何用ast重载运算符

转载 作者:行者123 更新时间:2023-11-28 20:58:15 24 4
gpt4 key购买 nike

我的问题是重新定义 +-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 时的正确操作。

我尝试使用 astNodeTransformer 但没有成功。有人可以帮助我吗?

最佳答案

创建自己的列表类并在其上定义加法运算符:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com