Standardschlüssel für Python-eingebaute Max / Min-Funktionen

8

Die Dokumentation für die integrierten Funktionen max und min in Python zeigt an, dass der Parameter key wie in der Funktion sort funktionieren sollte. Mit anderen Worten, ich sollte das tun können:

%Vor%

Dies führt jedoch zu einem Fehler: TypeError: 'NoneType' object is not callable

Aber wenn ich etwas Ähnliches mit der Funktion sort mache, bekomme ich die erwarteten Ergebnisse:

%Vor%

Es wird kein Fehler generiert und die Standardsortierung wird verwendet. Mehrere Bücher implizieren auch, dass ich mit dem gleichen Verhalten in den Funktionen max und min davonkommen könnte. Siehe diesen Auszug aus Python in Kürze .

Ist dies wirklich das Standardverhalten der Funktionen max und min ? Sollte es sein? Sollten sie nicht mit der Sortierfunktion übereinstimmen?

    
Chris Mansley 05.12.2011, 01:43
quelle

2 Antworten

23

Sie sind auf einen Unterschied in der Implementierung von .sort und max mehr gestoßen als ein Problem mit der Sprache.

list.sort() verwendet ein Schlüsselwortargument "key", das standardmäßig auf None festgelegt wird. Das bedeutet, dass die sort-Methode nicht unterscheiden kann, ob Sie ein key=None -Argument angeben oder nur den Standardwert übernehmen. In jedem Fall verhält es sich, als ob keine Schlüsselfunktion bereitgestellt wurde.

max prüft andererseits auf das Vorhandensein eines Schlüsselwortarguments "Schlüssel". Es hat keinen Standardwert und sein Wert wird als Schlüsselfunktion verwendet, falls überhaupt vorhanden.

In beiden Fällen sollte der Schlüssel niemals als "Keine" bereitgestellt werden. Es soll eine Funktion sein, die verwendet wird, um einen "Schlüssel" -Wert aus den Elementen in der Liste / iterierbar zu extrahieren. Zum Beispiel:

%Vor%     
David K. Hess 05.12.2011, 02:10
quelle
7

@ Davids Antwort ist perfekt. Fügen Sie einfach hinzu, falls Sie sich fragen, der Standardwert key (sowohl in sort als auch in max / min Funktionen) ist etwas wie:

%Vor%     
juliomalegria 05.12.2011 03:15
quelle

Tags und Links