Een beginnershandleiding om de Lambda-functies van Python te begrijpen

Een beginnershandleiding om de Lambda-functies van Python te begrijpen

Lambda's in Python zijn een van de handigste, belangrijkste en interessantste functies om over te weten. Helaas zijn ze ook gemakkelijk verkeerd te begrijpen en verkeerd te krijgen.





In dit artikel gaan we alles uitleggen wat je moet weten over deze mysterieuze functies, hoe je ze kunt gebruiken en waarom ze nuttig zijn.





Voordat je in deze praktische voorbeelden duikt, wil je misschien een virtuele Python-omgeving opzetten. Als je dat niet eens wilt doen, moet je op zijn minst deze voorbeelden proberen met een interactieve online Python-shell .





Wat is een Lambda in Python?

Een lambda is gewoon een manier om een ​​functie in Python te definiëren. Ze worden ook wel 'lambda-operators' of 'lambda-functies' genoemd.

Als je eerder Python hebt gebruikt, heb je waarschijnlijk je functies gedefinieerd met de zeker zoekwoord, en het heeft tot nu toe prima voor u gewerkt. Dus waarom is er een andere manier om hetzelfde te doen?



Het verschil is dat lambda-functies anoniem zijn. Dit betekent dat het functies zijn die geen naam hoeven te krijgen. Ze worden gebruikt om kleine, eenmalige functies te creëren in gevallen waar een 'echte' functie te groot en omvangrijk zou zijn.

Lambdas retourneert een functieobject, dat aan een variabele kan worden toegewezen. Lambda's kunnen een willekeurig aantal argumenten hebben, maar ze kunnen maar één uitdrukking hebben. U kunt geen andere functies binnen lambda's aanroepen.





Het meest voorkomende gebruik voor lambda-functies is in code die een eenvoudige eenregelige functie vereist, waar het overkill zou zijn om een ​​volledige normale functie te schrijven. Dit wordt hieronder in meer detail behandeld, onder 'Hoe zit het met kaarten, filteren en verkleinen?'.

Lambda's gebruiken in Python

Laten we, voordat we naar een lambda-functie kijken, kijken naar een superbasisfunctie die op de 'traditionele' manier is gedefinieerd:





def add_five(number):
return number + 5

print(add_five(number=4))

Deze functie is erg eenvoudig, maar dient om lambda's te illustreren. De jouwe is misschien ingewikkelder dan dit. Deze functie voegt vijf toe aan elk getal dat eraan wordt doorgegeven via de nummer parameter.

Zo ziet het eruit als een lambda-functie:

add_five = lambda number: number + 5

print(add_five(number=4))

In plaats van te gebruiken zeker , het woord lambda is gebruikt. Er zijn geen haakjes vereist, maar alle woorden die volgen op de lambda trefwoord worden gemaakt als parameters. De dubbele punt wordt gebruikt om de parameters en de uitdrukking te scheiden. In dit geval is de uitdrukking nummer + 5 .

Het is niet nodig om de te gebruiken opbrengst trefwoord --- de lambda doet dit automatisch voor u.

Zo maakt u een lambda-functie met twee argumenten:

kun je playstation 3-games spelen op ps4
add_numbers_and_five = lambda number1, number2: number1 + number2 + 5

print(add_numbers_and_five(number1=4, number2=3))

Als je nog steeds niet zeker bent over het punt van lambda's, duikt het volgende gedeelte erin en helpt je het licht te zien.

Python Lambda's met kaart, filter en verkleining

De Python-kernbibliotheek heeft drie methoden genaamd kaart , verminderen , en filter . Deze methoden zijn mogelijk de beste redenen om lambda-functies te gebruiken.

De kaart functie verwacht twee argumenten: een functie en een lijst. Het neemt die functie en past het toe op elk element in de lijst, en retourneert de lijst met gewijzigde elementen als een kaartobject. De lijst functie wordt gebruikt om het resulterende kaartobject weer om te zetten in een lijst.

Zo gebruikt u de kaart zonder lambda:

list1 = [2, 4, 6, 8]
print(list1)
def add_five(number):
return number + 5

new_list = list(map(add_five, list1))
print(new_list)

Deze kaartfunctie is best handig, maar kan beter. de add_five functie wordt doorgegeven als een argument, maar wat als u niet elke keer dat u kaart gebruikt een functie wilt maken? Je kunt in plaats daarvan een lambda gebruiken!

Hier is hoe diezelfde code eruit ziet, alleen met de functie vervangen door een lambda:

hoe zich te ontdoen van Skype voor bedrijven?
list1 = [2, 4, 6, 8]
print(list1)

new_list = list(map(lambda x: x + 5, list1))
print(new_list)

Zoals je kunt zien, het geheel add_five functie niet meer nodig. In plaats daarvan wordt de lambda-functie gebruikt om de zaken netjes te houden.

Met de filter functie, het proces is vrijwel hetzelfde. Filter neemt een functie en past deze toe op elk element in een lijst en maakte een nieuwe lijst met alleen de elementen die ervoor zorgden dat de functie True retourneerde.

Ten eerste, zonder lambda's:

numbers = [1, 4, 5, 10, 20, 30]
print(numbers)
def greater_than_ten_func(number):
if number > 10:
return True
else:
return False
new_numbers = list(filter(greater_than_ten_func, numbers))

print(new_numbers)

Er is niets mis met deze code, maar het wordt een beetje lang. Laten we eens kijken hoeveel regels een lambda kan verwijderen:

numbers = [1, 4, 5, 10, 20, 30]
print(numbers)
new_numbers = list(filter(lambda x: x > 10, numbers))
print(new_numbers)

De lambdafunctie heeft de behoefte aan het geheel vervangen grotere_than_ten_func ! En het is gedaan in vijf eenvoudige woorden. Dit is de reden waarom lambda's krachtig zijn: ze verminderen rommel voor eenvoudige taken.

Laten we tot slot eens kijken naar verminderen . Reduce is een andere coole Python-functie. Het past een voortschrijdende berekening toe op alle items in een lijst. Je zou dit kunnen gebruiken om een ​​som op te tellen, of alle getallen met elkaar te vermenigvuldigen:

from functools import reduce
numbers = [10, 20, 30, 40]
print(numbers)
def summer(a, b):
return a + b

result = reduce(summer, numbers)
print(result)

Dit voorbeeld moet worden geïmporteerd verminderen van de funtools module, maar maak je geen zorgen, de functools-module maakt deel uit van de Python-kernbibliotheek.

Het verhaal is vrijwel hetzelfde met een lambda, er is geen functie nodig:

from functools import reduce
numbers = [10, 20, 30, 40]
print(numbers)

result = reduce(lambda a, b: a + b, numbers)
print(result)

Waar u op moet letten bij Python Lambda's

Deze voorbeelden hebben laten zien hoe eenvoudig lambda-functies zijn, samen met map, filter en reduce, uit de Python-kernbibliotheek. Toch zijn er een paar toepassingen waarbij lambda-functies niet helpen.

Als je meer doet dan een basistaak, of andere methoden wilt aanroepen, gebruik dan een normale functie. Lambda's zijn geweldig voor eenmalige, anonieme functies, maar ze mogen maar één uitdrukking hebben. Als je lambda op een reguliere expressie begint te lijken, is het waarschijnlijk tijd om te refactoreren naar een speciale methode.

Voor meer tips, check onze gids voor objectgeoriënteerd programmeren in Python en bekijk onze FAQ-gids voor Python-beginners.

Deel Deel Tweeten E-mail 3 manieren om te controleren of een e-mail echt of nep is

Als je een e-mail hebt ontvangen die er een beetje dubieus uitziet, is het altijd het beste om de authenticiteit ervan te controleren. Hier zijn drie manieren om te zien of een e-mail echt is.

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Python
  • Codeerhandleidingen
Over de auteur Joe Coburn(136 gepubliceerde artikelen)

Joe is afgestudeerd in computerwetenschappen aan de Universiteit van Lincoln, VK. Hij is een professionele softwareontwikkelaar en als hij niet met drones vliegt of muziek schrijft, is hij vaak te vinden om foto's te maken of video's te maken.

Meer van Joe Coburn

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren