Python- 如何将字符串运算符转换回其特殊含义?
Python- How to convert stringed operator back to its special meaning?
我正在 python3.3 中编写一个程序,它要求我计算一个字符串表达式,如 :
"2+3"
我使用
将“2”和“3”转换为数字
int("2")
int("3")
但是如何更改“+”以获得其特殊含义?
您可以将 operrator
模块与 if
语句一起使用:
>>> import operator
>>> a=3
>>> b=2
>>> s='+'
>>> if s=='+':
... print operator.add(a,b)
...
5
The operator module exports a set of efficient functions corresponding to the intrinsic operators of Python.
如果您确定程序的输入来自安全来源,那么您可以 eval
您的字符串,就大功告成了。
>>> 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 的特殊方法,如 __add__
(如果你想要跨类型的灵活性,甚至可以 __radd__
),并可能使用 hasattr
查看类型是否支持操作,但如果您是 Python 的初学者,我不建议尝试这种方法。
我正在 python3.3 中编写一个程序,它要求我计算一个字符串表达式,如 :
"2+3"
我使用
将“2”和“3”转换为数字int("2")
int("3")
但是如何更改“+”以获得其特殊含义?
您可以将 operrator
模块与 if
语句一起使用:
>>> import operator
>>> a=3
>>> b=2
>>> s='+'
>>> if s=='+':
... print operator.add(a,b)
...
5
The operator module exports a set of efficient functions corresponding to the intrinsic operators of Python.
如果您确定程序的输入来自安全来源,那么您可以 eval
您的字符串,就大功告成了。
>>> 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 的特殊方法,如 __add__
(如果你想要跨类型的灵活性,甚至可以 __radd__
),并可能使用 hasattr
查看类型是否支持操作,但如果您是 Python 的初学者,我不建议尝试这种方法。