蟒蛇。将str('+')转换为数学运算

时间:2010-10-16 09:04:06

标签: python eval

如何将str('+')转换为数学运算? 例如:

a = [0,1,2] # or a = ['0','1','2']
b = ['+','-','*']
c = int(a[0]+b[0]+a[1])

换句话说,如果没有str('-1*2'),如何将int()转换为for i in c: if i == '+': ... 感谢。

7 个答案:

答案 0 :(得分:4)

您也可以使用操作员模块:

import operator as op
#Create a mapping between the string and the operator:
ops = {'+': op.add, '-': op.sub, '*': op.mul}

a = [0,1,2]
b = ['+','-','*']

#use the mapping
c = ops[b[0]](a[0], a[1])

答案 1 :(得分:2)

我很瘦你正在寻找eval(),但我建议用别的东西...... 但是,

>>> eval('-1*2')
-2

eval'执行'传递给它的字符串,就像代码一样。所以这对安全性来说非常危险,特别是如果参数是用户输入......

在这种情况下我建议使用解析库,例如ply http://www.dabeaz.com/ply/ 对于这样的事情来说,使用起来非常简单并且非常有效:)

答案 2 :(得分:2)

如果你的数学表达式适合Python语法,但你是eval(你应该),你可以查看python的ast模块(docs)。它会将表达式解析为可以迭代的抽象语法树。如果遇到表达式语法之外的任何内容,您可以评估Python的有限子集并抛出错误。

答案 3 :(得分:1)

像其他人一样使用eval,但先过滤它。

>>> s = '1 + 12 / 2 - 12*31'
>>> allowed = set(' 1234567890()+-/*\\')
>>> if allowed.issuperset(s):
...     eval(s)
... 
-365

答案 4 :(得分:1)

答案 5 :(得分:0)

使用eval:

> eval(str('-1*2'))
> -2

答案 6 :(得分:0)

Dett,

整个字符串的简单eval ...但是要注意,如果用户输入字符串,eval是有风险的,除非你先做一些解析

x = '-1*2'
y = eval(x)

y将是整数值。