Python 将字符串转换为运算符
如何将字符串(如Python 将字符串转换为运算符,python,evaluation,Python,Evaluation,如何将字符串(如“+”)转换为运算符plus? 谢谢 使用查找表: import operator ops = { "+": operator.add, "-": operator.sub } # etc. print ops["+"](1,1) # prints 2 您可以尝试使用eval(),但如果字符串不是来自您的,则会很危险。 否则你可能会考虑创建一个字典: ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)} 等等。。。然后
“+”
)转换为运算符plus?
谢谢 使用查找表:
import operator
ops = { "+": operator.add, "-": operator.sub } # etc.
print ops["+"](1,1) # prints 2
您可以尝试使用eval(),但如果字符串不是来自您的,则会很危险。
否则你可能会考虑创建一个字典:
ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}
等等。。。然后调用或,用于用户输入:ops['+'] (1,2)
if ops.haskey(userop):
val = ops[userop](userx,usery)
else:
pass #something about wrong operator
每个操作符都对应一个神奇的方法
OPERATORS = {'+': 'add', '-': 'sub', '*': 'mul', '/': 'div'}
def apply_operator(a, op, b):
method = '__%s__' % OPERATORS[op]
return getattr(b, method)(a)
apply_operator(1, '+', 2)
我知道你想做一些事情,比如: 5"+"7 这三件事都是通过变量传递的, 所以 例如:
我也遇到了同样的问题,使用Jupyter笔记本,无法导入操作员模块。因此,上面的代码帮助我了解情况,但无法在平台上运行。我想出了一个简单的方法来处理所有的基本函数,现在它是:(这可能是一个很大的改进,但这只是一个开始…)
使用查找dict,但使用lambdas而不是运算符库,怎么样
op = {'+': lambda x, y: x + y,
'-': lambda x, y: x - y}
然后你可以做:
print(op['+'](1,2))
它将输出:
3
相反,您可以将其他内容转换为字符串并在python3中求值,这将给出:“+”:operator.add,AttributeError:“str”对象没有属性“add”。问题是名称不正确的
operator
参数与导入的运算符模块冲突。我猜您将使用eval\u binary\u expr
内联get\u operator\u fn
。将操作符
参数更改为其他参数,如oper
,以及对它的所有引用。请参阅我的编辑。对于Python3,您还必须将operator.div
更改为operator.truediv
,并修复所有打印语句。注意:这将在每次调用时从头开始重建查找dict
,删除O(1)
查找功能。在函数外部定义dict
,这样它只生成一次。更彻底地说,@PaulMcG,Python3删除operator.truediv(返回浮点)的operator.div和operator.floordiv(Python2风格的整数除法)。这很好用,谢谢分享。为了验证,我们可以扩展apply_运算符。如果op='/'和b==0:如果op='/'和a==0,则返回np.inf。这不允许正常工作。
op = {'+': lambda x, y: x + y,
'-': lambda x, y: x - y}
print(op['+'](1,2))
3