Il est étrange de constater combien la beauté varie pour différentes personnes. - Je trouver la liste de compréhension beaucoup plus claire que le laid filtre+lambda, mais d'utiliser celui qui vous est le plus facile. Cependant, ne cesser de donner vos noms de variables déjà utilisées pour les objets internes, c'est juste moche, et pas ouvert à la discussion.
Il y a deux choses qui peuvent ralentir votre utilisation du filtre.
Le premier est l'appel de la fonction généraux: dès que vous utilisez une fonction Python (qu'elle soit créée par def ou lambda), il est probable que le filtre sera plus lente que la compréhension de liste. Il n'est presque certainement pas assez de matière, et vous ne devriez pas penser beaucoup plus au sujet de la performance jusqu'à ce que vous avez chronométré votre code et l'a trouvé pour être un goulot d'étranglement, mais la différence est là.
Les autres frais généraux qui pourraient s'appliquer, c'est que le lambda est contraint d'accéder à une étendue variable (value
). Qui est plus lent que l'accès à une variable locale et en Python 2.x la compréhension de liste accède seulement les variables locales. Si vous êtes à l'aide de Python 3.x la compréhension de liste s'exécute dans une fonction distincte de sorte qu'il sera également accéder value
grâce à une fermeture et cette différence ne s'appliquent pas.
L'autre option à envisager est d'utiliser un générateur au lieu d'une compréhension de liste:
def filterbyvalue(seq, value):
for el in seq:
if el.attribute==value: yield el
Puis dans votre code principal (qui est l'endroit où la lisibilité est vraiment important que vous avez remplacé à la fois compréhension de liste et le filtre avec un espoir significative nom de la fonction.