2014-01-16 6 views
9

Diese Frage subjektiv klingen könnte, sondern als „die Zen“ sagt, gibt es (fast immer) einen Weg, um bevorzugt, soll es nicht am Ende subjektiv sein.Python Zen - (nur) eine Möglichkeit, es zu tun

welche Weise ist die bessere?

[i.something() for i in l] 
map(operator.methodcaller('something'), l) 
map(lambda x: x.something(), l) 

(1) ist (IMO) sehr klar, aber in vielen Antworten wird map() verwendet. Und wenn wir das tun, ist die Lesbarkeit zwischen (2) und (3) fast gleich (zumindest IMO).

Das gleiche gilt für viele andere Aufgaben, aber ich habe diese Auserwählte, wie es für alle diejenigen similiar stehen kann.

+1

Ist es sicher anzunehmen, dass '.something()' verändert nicht 'I' in irgendeiner Weise? –

+3

Immer Verständnis auflisten. – freakish

Antwort

8
  • Einfach ist besser als komplex.
  • Ablesbarkeit zählt.

Beide sind klare Argumente für [i.something() for i in l].

Dies setzt voraus, dass .something() nicht i nicht mutieren, und dass Sie sich auf Python sind 2.

+1

Also, wenn diese Funktion mutiert, was sollte bevorzugt werden? – thefourtheye

+5

@thefourtheye: Keine der oben genannten. In diesem Fall wäre eine explizite 'for'-Schleife am besten:' für das Element in l: item.something() '. Listencomprehensions oder 'map's für Nebenwirkungen zu verwenden, ist hässlich. –

+0

Und die Liste Verständnis ist besser als die explizite for-Schleife, wenn Sie eine Liste der Rückgabewerte haben wollen. Korollar: Methoden sollten entweder eine Instanz mutieren oder etwas Nützliches zurückgeben, beides in einer Methode ist weniger gut. – RemcoGerlich

Verwandte Themen