Wat is key=lambda

Bij het gebruik van enkele ingebouwde functies zoals gesorteerd, optellen…
Ik zag het gebruik van key=lambda

Wat is lambda? Hoe werkt het?

Welke andere functies gebruiken key=lambda?

Zijn er andere sleutelwaarden, zoals key=?


Antwoord 1, autoriteit 100%

Een lambda is een anonieme functie:

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

Het wordt vaak gebruikt in functies zoals sorted() die een aanroepbare parameter als parameter nemen (vaak de sleutelwoordparameter key). Je zou daar ook een bestaande functie kunnen opgeven in plaats van een lambda, zolang het maar een aanroepbaar object is.

Neem de sorted()-functie als Een voorbeeld. Het retourneert de gegeven iterabele in gesorteerde volgorde:

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

maar dat sorteert woorden in hoofdletters voor woorden in kleine letters. Met behulp van het trefwoord key kunt u elk item wijzigen, zodat het anders wordt gesorteerd. We kunnen alle woorden in kleine letters zetten voordat we ze sorteren, bijvoorbeeld:

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

Daar moesten we een aparte functie voor maken, we konden de regel def lowercased() niet inline in de sorted()-expressie:

>>> 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

Een lambda daarentegen kan direct, inline, worden gespecificeerd in de uitdrukking sorted():

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

Lambda’s zijn beperkt tot slechts één uitdrukking, waarvan het resultaat de retourwaarde is.

Er zijn tal van plaatsen in de Python-bibliotheek, inclusief ingebouwde functies, die een oproepbaar als trefwoord of positioneel argument gebruiken. Het zijn er te veel om hier op te noemen, en vaak spelen ze een andere rol.


Antwoord 2, autoriteit 15%

In Python is lambda een sleutelwoord dat wordt gebruikt om anonieme functies(functies zonder naam) te definiëren en daarom staan ​​ze bekend als lambda-functies.

In principe wordt het gebruikt voor het definiëren van anonieme functies die wel/niet argument(en) kunnen verdragen en retourneert de waarde van gegevens/expressie. Laten we een voorbeeld bekijken.

>>> # 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
>>> 

Laat me nu een antwoord geven op uw 2e vraag. Het 1e antwoord is ook geweldig. Dit is mijn eigen manier om het uit te leggen met een ander voorbeeld.

Stel dat we een lijst hebben met items (gehele getallen en strings met numerieke inhoud) als volgt,

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

en ik wil het sorteren met de functie sorted(), laten we eens kijken wat er gebeurt.

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

Het gaf me niet wat ik verwachte zoals ik wilde zoals hieronder,

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

Het betekent dat we een strategie nodig hebben (zodat gesorteerd onze string-items als een ints zou kunnen behandelen) om dit te bereiken. Daarom wordt het trefwoordargument key gebruikt. Bekijk de onderstaande.

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

Laten we de lambda-functie gebruiken als een waarde van key

>>> 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']
>>>

U kunt uw eigen functie definiëren (aanroepbaar) en deze opgeven als waarde van key.

Beste programmeurs, ik heb de onderstaande code voor je geschreven, probeer het gewoon begrijpen en commentaar je uitleg. Ik zou graag uw uitleg zien (het is eenvoudig).

>>> 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]
>>>

Ik hoop dat het nuttig zou zijn.


Antwoord 3, autoriteit 14%

Lambda kan elke functie zijn. Dus als je een functie had

def compare_person(a):
         return a.age

U kunt een lijst met Persoon (die elk een leeftijdskenmerk hebben) als volgt sorteren:

sorted(personArray, key=compare_person)

Op deze manier zou de lijst in oplopende volgorde op leeftijd worden gesorteerd.

De parameter wordt lambda genoemd omdat python handige lambda-sleutelwoorden heeft om dergelijke functies direct te definiëren. In plaats van een functie vergelijk_persoon te definiëren en die door te geven aan gesorteerd, kun je ook schrijven:

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

die hetzelfde doet.


Antwoord 4, autoriteit 4%

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

Eigenlijk kunnen bovenstaande codes zijn:

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

Volgens https://docs.python.org/ 2/library/functions.html?highlight=sorted#sorted, specificeert key een functie van één argument dat wordt gebruikt om een ​​vergelijkingssleutel uit elk lijstelement te extraheren: key=str.lower. De standaardwaarde is Geen (vergelijk de elementen direct).

LEAVE A REPLY

Please enter your comment!
Please enter your name here

5 × 4 =

Other episodes