2015-12-16 7 views
1

После этой темы около iterating through a sequence of operators, я хочу также позаботиться о унарных операторах в той же последовательности. Я использовал функцию лямбда, чтобы избавиться от второго аргумента, но есть ли специальные инструменты/библиотеки для этого в 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))) 
+0

Я думаю, что вы должны обрабатывать унифицированную и двоичную раздельно, вы хотите получить '5 - 7 = -5'? –

+0

@bigOTHER Да, это то, что я хочу/получаю. Конечно, я могу сделать отдельный цикл для унарных операционных систем. Но, возможно, для этого есть более Pythonic way/some standard library. (В C++ у вас есть bind1st и т. Д.) –

+1

альтернативой bind1st в python является 'functools.partial', но' lambda' выполняет задание магически, поэтому предпочитайте его. Тем не менее, в вашем случае, просто отделите его, в python base readabilty counts –

ответ

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))) 

 Смежные вопросы

  • Нет связанных вопросов^_^