Можете ли вы применить операцию непосредственно к аргументам в map/reduce/filter?

mapи filterчасто взаимозаменяемы со списками, но reduceне так легко заменить, как mapиfilter(кроме того, в некоторых случаях я все равно предпочитаю функциональный синтаксис ). Однако, когда вам нужно оперировать самими аргументами,Я обнаружил, что занимаюсь синтаксической гимнастикой, и в конечном итоге мне приходится писать целые функции, чтобы поддерживать читабельность.

Я буду использовать map, чтобы не усложнять иллюстративный модульный -тест, но, пожалуйста, имейте в виду, что реальные -варианты жизненного использования -могут быть сложнее выразить в виде понимания списка.

Я нашел два грязных способа сделать это, но ни один из них я бы никогда не использовал.

[afunc(*i) for i in aniter] == map(afunc, *zip(*aniter))
[afunc(*i) for i in aniter] == map(lambda i: apply(afunc, i), aniter)

Есть ли какой-нибудь содержательный, элегантный способ выразить правую часть этих выражений?

6
задан kojiro 9 July 2012 в 20:28
поделиться