我想根据字符串的上下文替换比较标记。我正在使用Python 3.5上的PyQt5实验来完成它。
例如:
line = "<"
if 1 line 2:
print("False")
有没有简单的方法可以做到这一点?我考虑过使用测试用例:
if line == "<":
if 1 < 2:
print("False")
等等,但这很长,特别是对于迭代的“if”语句。 例:
if pt1 < pt1_target:
if pt2 > pt2_target:
etc.
或者,如果这是不可能的,有没有人有任何解决方案来避免每个分支的大量,全部“if”语句块?我打算放入一些指令,因此line
最终会替换正确的python等价物,例如"="
而不是正确的"=="
。
提前致谢!
答案 0 :(得分:3)
使用operator
模块中的功能:
from operator import eq, ne, lt, le, gt, ge
operator_functions = {
'=': eq,
'!=': ne,
'<': lt,
'<=': le,
'>': gt,
'>=': ge,
}
operator = # whatever
if operator_functions[operator](a, b):
do_whatever()
答案 1 :(得分:2)
您可以使用字典将运算符字符串映射到operator
模块中的相应函数:
import operator
ops = {'>': operator.gt,
'<': operator.lt,
'==': operator.eq,
# etc...
}
op_string = '<'
if ops[op_string](1, 2):
print('True')
# or this...
print(ops[op_string](1, 2))
请注意,此示例打印True
。您的示例似乎否定了1 < 2
将评估为False
的逻辑 - 如果这是您想要的,那么您可以切换逻辑:
if ops[op_string](1, 2):
print 'False'
# or this...
print(not ops[op_string](1, 2))
或者您可以更改运算符映射:
ops = {'<': operator.ge, ...}
print(ops[op_string](1, 2))
# False