Бинарная функция Python в унарную

Следуя этой ветке об переборе последовательности операторов, я также хочу позаботьтесь об унарных операторах в той же последовательности. Я использовал лямбда-функцию, чтобы избавиться от второго аргумента, но есть ли для этого специальные инструменты/библиотеки в Python?

a, b = 5, 7
for op in [('+', operator.add), ('-', lambda x, y: operator.neg(x))]:
    print("{} {} {} = {}".format(a, op[0], b, op[1](a, b)))

person green diod    schedule 16.12.2015    source источник
comment
Я думаю, что вы должны обрабатывать унарные и двоичные файлы отдельно, вы хотите получить 5 - 7 = -5?   -  person bigOther    schedule 16.12.2015
comment
@bigOTHER Да, это то, что я хочу/получаю. Конечно, я могу сделать отдельный цикл для унарных операций. Но, может быть, для этого есть более питонический способ/какая-то стандартная библиотека. (В С++ у вас есть bind1st и т. д.)   -  person green diod    schedule 16.12.2015
comment
альтернативой bind1st в python является functools.partial, но lambda выполняет работу волшебным образом, поэтому предпочитайте его. Тем не менее, в вашем случае просто разделите его, в подсчете читабельности базы Python   -  person bigOther    schedule 16.12.2015


Ответы (1)


Просто разделите обработку бинарных и унарных операторов.

a, b = 5, 7
# binary ops
for op in [('+', operator.add), ('-', operator.sub]:
    print("{} {} {} = {}".format(a, op[0], b, op[1](a, b)))

#unary ops
for op in [('-', operator.neg]:
    print("{} {} = {}".format(op[0], a, op[1](a)))
person bigOther    schedule 16.12.2015