我正在尝试构建一个与运算符匹配的函数,例如
-
:
def testM(x):
match x:
case (operator.sub,a,b):
return operator.sub(a,b)
case ('-',a, b):
return a-b
case ("+",a,b):
return a+b
case ("other strange op",a,b,c):
return (a+b-c)
.......
case _ :
return 0
该函数将在jupyter中使用,因此用户会经常键入它。我希望尽可能减少击键次数
testM('-',5,1) ## 3 key strokes
# it works and return 4
testM((operator.sub,4,1)) ## 12 key strokes
# it works and return 3
目标是,用户可以这样称呼它,但它不起作用。
testM(-,5,1) ## only 1 key strokes
# it return 4
有没有办法逃避参数中
-
的评估?那么 python 不会引发错误?
我不确定模式匹配是正确的方法。您只需检查运算符的类型并返回所需的操作即可。检查可调用和字符串的示例:
from simpleeval import simple_eval
from functools import reduce
def testM(*x):
if callable(x[0]):
return reduce(x[0], x[1:])
else:
return simple_eval(x[0].join(map(str, x[1:])))
输出:
print(testM('-', 5, 2)) #3
print(testM('+', 5, 2, 4)) #11
print(testM(operator.add, 5, 2, 4)) #11