Как получить операцию сравнения из строки?
У меня есть json-файл и некоторые его поля это операции сравнения в виде строки. Мне нужно перевести его строки в оператор. Я мог бы это сделать примерно так:
if str_operator == '>':
if a > b:
pass
else:
pass
if str_operator == '<':
if a < b:
pass
else:
pass
...
Но код в этом случае станет большим.
Я пробовал использовать exec(), и всё было хорошо пока не появились присваивания. Я пытался реализовать все через eval(), но я либо не правильно понял как он работает, либо в eval() нельзя использовать условия.
Надеюсь, что в этом случае есть способ кроме первого.
Ответы (1 шт):
Автор решения: denisnumb
→ Ссылка
Как вариант, сделать словарь, в котором ключ — строка, представляющая оператор, а значение - функция, принимающая объекты для сравнения:
operator_to_func = {
'>': lambda a, b: a > b,
'<': lambda a, b: a < b,
'>=': lambda a, b: a >= b,
'<=': lambda a, b: a <= b
}
Использовать можно так:
a, b = 1, 2
for operator in '>', '<', '>=', '<=':
result = operator_to_func[operator](a, b)
print(f'{a} {operator} {b} = {result}')
Вывод:
1 > 2 = False
1 < 2 = True
1 >= 2 = False
1 <= 2 = True
Ну либо также через eval
:
a, b = 1, 2
for operator in '>', '<', '>=', '<=':
expression = f'{a}{operator}{b}'
result = eval(expression)
print(f'{expression} = {result}')
Вывод будет тот же