2012-12-02 3 views
28

Während mit einigen eingebauten Funktionen wie sortiert, Summe ... bemerkte ich die Verwendung von key=lambdaWas Schlüssel = Lambda

Was Lambda ist? Wie funktioniert es?

Welche anderen Funktionen verwenden key = Lambda?

Gibt es andere Schlüsselwerte wie, key=?

+0

'key' in diesem Fall ist ein Schlüsselwort Argument und hat nichts mit' Lambda' zu tun. – l4mpi

+0

Sehen Sie dies: http://StackOverflow.com/Questions/8966538/Syntax-behind-sortedkey-Lambda – sachinjain024

Antwort

57

A lambda ist eine anonyme Funktion:

>>> f = lambda: 'foo' 
>>> print f() 
foo 

Es ist oft in Funktionen wie sorted() verwendet wird, die eine aufrufbare als Parameter (oft key Schlüsselwortparameter). Sie könnten dort auch eine vorhandene Funktion anstelle eines lambda bereitstellen, sofern es sich um ein aufrufbares Objekt handelt.

Nehmen Sie die sorted() function als ein Beispiel. Es wird die angegebene iterable in sortierter Reihenfolge zurück:

>>> sorted(['Some', 'words', 'sort', 'differently']) 
['Some', 'differently', 'sort', 'words'] 

aber, dass Sorten Worte, bevor Wörter groß geschrieben, die klein geschrieben werden. Mit dem Schlüsselwort key können Sie jeden Eintrag ändern, damit er anders sortiert wird. Wir konnten alle Wörter klein geschrieben vor dem Sortieren, zum Beispiel:

>>> def lowercased(word): return word.lower() 
... 
>>> lowercased('Some') 
'some' 
>>> sorted(['Some', 'words', 'sort', 'differently'], key=lowercased) 
['differently', 'Some', 'sort', 'words'] 

wir eine eigene Funktion dafür zu schaffen hatten, konnten wir nicht inline die def lowercased() Linie in den sorted() Ausdruck:

>>> sorted(['Some', 'words', 'sort', 'differently'], key=def lowercased(word): return word.lower()) 
    File "<stdin>", line 1 
    sorted(['Some', 'words', 'sort', 'differently'], key=def lowercased(word): return word.lower()) 
                 ^
SyntaxError: invalid syntax 

A lambda auf der anderen Seite kann direkt angegeben werden, inline in dem sorted() Ausdruck:

>>> sorted(['Some', 'words', 'sort', 'differently'], key=lambda word: word.lower()) 
['differently', 'Some', 'sort', 'words'] 

Lambdas sind nur auf einen Ausdruck beschränkt, dessen Ergebnis der Rückgabewert ist.

Es gibt viele Stellen in der Python-Bibliothek, einschließlich integrierter Funktionen, die als Schlüsselwort- oder Positionsargument aufgerufen werden können. Es gibt zu viele, um hier zu nennen, und sie spielen oft eine andere Rolle.

8

Lambda kann eine beliebige Funktion sein. Also, wenn Sie

def compare_person(a): 
     return a.age 

eine Funktion haben, können Sie eine Liste von Person sortieren (jeweils ein Altes Attribute, das mit) wie folgt aus:

sorted(personArray, key=compare_person) 

Auf diese Weise würde die Liste nach Alter sortiert wird in aufsteigende Reihenfolge.

Der Parameter wird Lambda genannt, weil Python ein geschicktes Lambda-Schlüsselwort für die Definition solcher Funktionen im laufenden Betrieb hat. Anstatt eine Funktion compare_person zu definieren und diese an sorted zu übergeben, können Sie auch Folgendes schreiben:

sorted(personArray, key=lambda a: a.age) 

was das gleiche tut.

3
>>> sorted(['Some', 'words', 'sort', 'differently'], key=lambda word: word.lower()) 

Eigentlich kann über Codes sein:

>>> sorted(['Some','words','sort','differently'],key=str.lower) 

Nach https://docs.python.org/2/library/functions.html?highlight=sorted#sorted spezifiziert Schlüssel eine Funktion von einem Argument, das einen Vergleich Schlüssel von jedem Listenelement zu extrahieren, verwendet wird: Schlüssel = str.lower . Der Standardwert ist None (die Elemente direkt vergleichen).

2

In Python Lambda ist ein Schlüsselwort verwendet anonyme Funktionen (Funktionen ohne Namen), und das ist zu definieren, warum sie als Lambda-Funktionen bekannt sind.

Grundsätzlich ist es für die Definition anonyme Funktionen verwendet, die nichtArgument kann/können (s) und kehrt Wert von Daten/Ausdruck. Lassen Sie uns ein Beispiel sehen.

>>> # Defining a lambda function that takes 2 parameters(as integer) and returns their sum 
... 
>>> lambda num1, num2: num1 + num2 
<function <lambda> at 0x1004b5de8> 
>>> 
>>> # Let's store the returned value in variable & call it(1st way to call) 
... 
>>> addition = lambda num1, num2: num1 + num2 
>>> addition(62, 5) 
67 
>>> addition(1700, 29) 
1729 
>>> 
>>> # Let's call it in other way(2nd way to call, one line call) 
... 
>>> (lambda num1, num2: num1 + num2)(120, 1) 
121 
>>> (lambda num1, num2: num1 + num2)(-68, 2) 
-66 
>>> (lambda num1, num2: num1 + num2)(-68, 2**3) 
-60 
>>> 

Nun lassen Sie mich eine Antwort Ihrer 2. Frage geben. Die 1st Antwort ist auch großartig. Dies ist meine eigene Art, dies mit einem anderen Beispiel zu erklären.

Angenommen, haben wir eine Liste der Elemente (ganze Zahlen und Strings mit numerischen Inhalt) wie folgt,

nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"] 

und ich möchte es sortieren sortiert() verwendet Funktion, können sehen, was das passiert.

>>> nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"] 
>>> sorted(nums) 
[1, 3, 4, '-1', '-10', '2', '5', '8'] 
>>> 

Es hat nicht mir geben, was ich erwartet, wie ich wie unten wollte,

['-10', '-1', 1, '2', 3, 4, '5', '8'] 

Das heißt, wir brauchen eine Strategie (so dass unsere Schnur Gegenstände behandeln sortiert könnte als ein Ints), um dies zu erreichen. Aus diesem Grund wird das Schlüsselwort Schlüssel verwendet. Bitte sehen Sie sich den folgenden an.

>>> nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"] 
>>> sorted(nums, key=int) 
['-10', '-1', 1, '2', 3, 4, '5', '8'] 
>>> 

Ermöglicht Verwendung Lambda-Funktion als Wert Schlüssel

>>> names = ["Rishikesh", "aman", "Ajay", "Hemkesh", "sandeep", "Darshan", "Virendra", "Shwetabh"] 
>>> names2 = sorted(names) 
>>> names2 
['Ajay', 'Darshan', 'Hemkesh', 'Rishikesh', 'Shwetabh', 'Virendra', 'aman', 'sandeep'] 
>>> # But I don't want this o/p(here our intention is to treat 'a' same as 'A') 
... 
>>> names3 = sorted(names, key=lambda name:name.lower()) 
>>> names3 
['Ajay', 'aman', 'Darshan', 'Hemkesh', 'Rishikesh', 'sandeep', 'Shwetabh', 'Virendra'] 
>>> 

Sie können Ihre eigene Funktion (aufrufbar) und bieten es als Wert Schlüssel definieren.

Lieber programers, ich habe den Code unten für Sie geschrieben, nur versuchen zu verstehen es und Kommentar Ihre Erklärung.Ich würde mich freuen, deine Erklärung zu sehen (es ist einfach).

>>> def validator(item): 
...  try: 
...   return int(item) 
...  except: 
...   return 0 
... 
>>> sorted(['gurmit', "0", 5, 2, 1, "front", -2, "great"], key=validator) 
[-2, 'gurmit', '0', 'front', 'great', 1, 2, 5] 
>>> 

I Hoffnung es nützlich wäre.

Verwandte Themen