Is it readable?
Para mim: Sim, mas cheguei a entender que a comunidade Python muitas vezes parece considerar a compreensão de listas uma solução mais limpa do que usar map()
/ filter()
.
Na verdade, o GvR até mesmo considerou eliminar completamente essas funções.
Considere isso:
filtered = [item for item in measures if included(item.time, dur)]
Além disso, isso tem o benefício de que uma compreensão de lista sempre retornará uma lista. map()
e filter()
, por outro lado, retornarão um iterador no Python 3.
Observação: se você quiser ter um iterador, é tão simples quanto substituir []
por ()
:
filtered = (item for item in measures if included(item.time, dur))
Para ser honesto, vejo pouco ou nenhum motivo para usar map()
ou filter()
no Python.
Is it Modifiable?
Sim, certamente, no entanto, há uma coisa para tornar isso mais fácil: Faça disso uma função, não um lambda.
def is_included(item):
return included(item.time, dur)
filtered = filter(is_included, measures)
filtered = [item for item in measures if is_included(item)]
Se a sua condição se tornar mais complexa, isso será muito mais fácil, além de permitir que você reutilize seu cheque. (Note que você pode criar funções dentro de outras funções, isso pode mantê-lo mais próximo do local onde é usado).
How does a developer that hasn't written/learned FP react on code like this?
Ele faz o google na documentação do Python e sabe como funciona cinco minutos depois. Caso contrário, ele não deveria estar programando em Python.
map()
e filter()
são extremamente simples. Não é como se você estivesse pedindo para eles entenderem as mônadas. É por isso que não acho que você precise escrever esses comentários. Use bons nomes de variáveis e funções, então o código é quase auto-explicativo. Você não pode prever quais recursos de idioma um desenvolvedor não conhece. Por tudo que você sabe, o próximo desenvolvedor pode não saber o que é um dicionário.
O que não entendemos geralmente não é legível para nós. Assim, você poderia argumentar que não é menos legível do que uma compreensão de lista, se você nunca viu nenhum deles antes. Mas como Joshua mencionou em seu comentário, eu também acredito que é importante ser coerente com o que outros desenvolvedores usam - pelo menos se a alternativa não fornecer nenhuma vantagem substancial.