Возможно ли / Есть ли способ перебрать последовательность операторов, как в следующем примере?

a, b = 5, 7
for op in (+, -, *, /):
    print(a, str(op), b, a op b)

Одним из возможных вариантов использования является проверка реализации различных операторов для некоторого абстрактного типа данных, где эти операторы перегружены.

2
green diod 16 Дек 2015 в 16:04

3 ответа

Лучший ответ

Вы можете использовать операторский модуль.

for op in [('+', operator.add), ('-', operator.sub), ('*', operator.mul), ('/', operator.div)]:
    print("{} {} {} = {}".format(a, op[0], b, op[1](a, b)))
6
Daniel Roseman 16 Дек 2015 в 13:13

Вы можете создавать свои собственные операции, а затем выполнять их.

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

def mult(a, b):
    return a * b

def div(a, b):
    return a / b
a, b = 5, 7

operations = {'+': add,'-': sub, '*':mult, '/': div}
for op in operations:
    print(a, op, b, operations[op](a, b))
1
Kenly 16 Дек 2015 в 13:39

Попробуй это:

a,b=5,7
for op in ['+','-','*','/']:
    exec 'print a' + op + 'b'

Надеюсь это поможет!

0
Douglas - 15 year old Pythoner 16 Дек 2015 в 14:34