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)
Есть ли какой-нибудь содержательный, элегантный способ выразить правую часть этих выражений?