Python-如何将字符串运算符转换回其特殊含义?

Python-如何将字符串运算符转换回其特殊含义?,python,string,operators,Python,String,Operators,我正在用python3.3编写一个程序,它要求我计算一个字符串表达式,如: "2+3" 我使用 int("2") int("3") 但是如何更改“+”以获得其特殊含义呢?您可以使用带有if语句的模块: >>> import operator >>> a=3 >>> b=2 >>> s='+' >>> if s=='+': ... print operator.add(a,b) ... 5 操作符模

我正在用python3.3编写一个程序,它要求我计算一个字符串表达式,如:

"2+3"
我使用

int("2")
int("3")
但是如何更改“+”以获得其特殊含义呢?

您可以使用带有
if
语句的模块:

>>> import operator
>>> a=3
>>> b=2
>>> s='+'
>>> if s=='+':
...  print operator.add(a,b)
... 
5
操作符模块导出一组与Python的内部操作符相对应的有效函数

您可以将模块与
if
语句一起使用:

>>> import operator
>>> a=3
>>> b=2
>>> s='+'
>>> if s=='+':
...  print operator.add(a,b)
... 
5
操作符模块导出一组与Python的内部操作符相对应的有效函数


如果您确定程序的输入来自一个安全的源,那么您可以只使用字符串,就完成了

>>> eval('2+3')
5
如果出于任何原因无法使用
eval
,请尝试从
operator
模块将运算符字符串映射到相应的函数:

>>> from operator import add, sub, mul, div
>>> opmap = {'+':add, '-':sub, '*':mul, '/':div}
>>> opmap.get('+')(int('2'), int('3'))
5
如果您真的无法执行这些操作,那么另一种方法是使用带有显式计算的If-elif语句,如下所示:

if op == '+':
    int(left_operand) + int(right_operand)
elif op == '-':
    int(left_operand) - int(right_operand)
# etc.

另一种方法是使用Python的特殊方法,如
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
(如果您想要跨类型灵活性,甚至可以使用如果您确信程序的输入来自安全的源代码,那么您可以只使用字符串,就完成了

>>> eval('2+3')
5
如果出于任何原因无法使用
eval
,请尝试从
operator
模块将运算符字符串映射到相应的函数:

>>> from operator import add, sub, mul, div
>>> opmap = {'+':add, '-':sub, '*':mul, '/':div}
>>> opmap.get('+')(int('2'), int('3'))
5
如果您真的无法执行这些操作,那么另一种方法是使用带有显式计算的If-elif语句,如下所示:

if op == '+':
    int(left_operand) + int(right_operand)
elif op == '-':
    int(left_operand) - int(right_operand)
# etc.

另一种方法是使用Python的特殊方法,如
\uuuuu add\uuuuuu
(如果您想要跨类型的灵活性,甚至可以使用
\uuuu radd\uuuuuu
),并可能使用来查看类型是否支持操作,但如果您是Python的初学者,我不建议您尝试这种方法。

尝试使用if语句。如果string==“+”,那么a+b,或者如果string中的“+”,那么做一些事情我已经尝试过了,但是它涉及很多索引(在2位或3位数字的情况下),这使得程序非常长。我正在寻找一种使程序简短的方法。请尝试使用if语句。如果string==“+”,那么a+b,或者如果string中的“+”,那么做一些事情我已经尝试过了,但是它涉及很多索引(在2位或3位数字的情况下),这使得程序非常长。我正在寻找一种使程序简短的方法。这也将涉及大量索引,因为用户将给出字符串表达式。难道没有更有效的方法吗?如果s==“+”:打印a+b,这有什么不同。同样的工作,但是没有导入。@msanti它作为
operator
模块是不灵活的,而且您自己也不能使用运算符,例如在只接受函数作为参数的函数中,例如
map
或…@ribudaspurkaya,因为实际上您无法轻松完成解析任务!执行此任务最合适的方法是使用适当的解析器!这也将涉及大量索引,因为用户将给出字符串表达式。难道没有更有效的方法吗?如果s==“+”:打印a+b,这有什么不同。同样的工作,但是没有导入。@msanti它作为
operator
模块是不灵活的,而且您自己也不能使用运算符,例如在只接受函数作为参数的函数中,例如
map
或…@ribudaspurkaya,因为实际上您无法轻松完成解析任务!执行此任务最合适的方法是使用适当的解析器!相当夸张。。。为了安全起见,您可以使用pyparsing或ply放置一个方法:P@JoranBeasley我不得不拿出一种方法。我错误地认为,
ast.literal\u eval
可以工作。我对它进行了测试,它为许多运算符提供了格式错误的字符串错误:我不知道pyparsing和ply是什么。:)Lexers/grammars@JoranBeasley谢谢,看起来很有趣,我有空的时候会读的。:)相当夸张。。。为了安全起见,您可以使用pyparsing或ply放置一个方法:P@JoranBeasley我不得不拿出一种方法。我错误地认为,
ast.literal\u eval
可以工作。我对它进行了测试,它为许多运算符提供了格式错误的字符串错误:我不知道pyparsing和ply是什么。:)Lexers/grammars@JoranBeasley谢谢,看起来很有趣,我有空的时候会读的。:)