Een beginnershandleiding om Python Lambda-functies te begrijpen
Lambdas in Python zijn een van de nuttigste, belangrijke en interessante functies om te weten. Helaas zijn ze ook gemakkelijk verkeerd te begrijpen en krijgen ze fouten.
In dit artikel leggen we uit 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 omgeving van Python opzetten. Leer hoe je de virtuele omgeving van Python gebruikt Leer hoe je de virtuele omgeving van Python kunt gebruiken Of je nu een ervaren Python-ontwikkelaar bent, of je bent net begonnen, leren hoe het instellen van een virtuele omgeving is essentieel voor elk Python-project. Lees verder . Als je dat niet eens wilt doen, moet je deze voorbeelden in ieder geval proberen met een interactieve online Python-shell. Probeer Python in je browser met deze gratis online interactieve shells Probeer Python in je browser met deze gratis interactieve online-shells Of je nu bent Als u deze Python-voorbeelden doorloopt of de grondbeginselen van arrays en lijsten bekijkt, kunt u de code rechtstreeks in uw browser testen. Dit zijn de beste online Python-tolken die we hebben gevonden. Lees verder .
Wat is een Lambda in Python?
Een lambda is eenvoudigweg een manier om een functie in Python te definiëren. Ze zijn soms bekend als “lambda-operators” of “lambda-functies”.
Als je Python eerder hebt gebruikt, heb je waarschijnlijk je functies gedefinieerd met behulp van de def zoekwoord en het werkte tot nu toe prima voor u. 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 niet hoeven te worden benoemd. Ze worden gebruikt om kleine, eenmalige functies te creëren in gevallen waarin a “echt” functie zou te groot en omvangrijk zijn.
Lambdas retourneren een functieobject, dat aan een variabele kan worden toegewezen. Lambda's kunnen een willekeurig aantal argumenten hebben, maar ze kunnen maar één uitdrukking hebben. Je kunt geen andere functies binnen lambda's noemen.
Het meest voorkomende gebruik voor lambda-functies is in code die een eenvoudige eenregelfunctie vereist, waarbij het overkill zou zijn om een volledige normale functie te schrijven. Dit wordt hieronder in meer detail besproken, onder “Hoe zit het met Map, Filter en Reduceer?”.
Hoe Lambdas in Python te gebruiken
Voordat we naar een lambda-functie kijken, laten we kijken naar een super-basisfunctie die gedefinieerd is als de “traditioneel” manier:
def add_five (number): retournummer + 5 print (add_five (number = 4))
Deze functie is erg eenvoudig, maar het dient om lambda's te illustreren. De jouwe kan complexer zijn dan dit. Met deze functie voegt u vijf toe aan elk nummer dat er via de aantal parameter.
Hier is hoe het eruit ziet als een lambda-functie:
add_five = lambda-nummer: nummer + 5 afdrukken (add_five (nummer = 4))
In plaats van te gebruiken def, het woord lambda is gebruikt. Er zijn geen haakjes vereist, maar alle woorden na de lambda sleutelwoord wordt 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 het te gebruiken terugkeer trefwoord - de lambda doet dit automatisch voor u.
Hier is hoe je een lambda-functie zou maken met twee argumenten:
add_numbers_and_five = lambda nummer1, nummer2: nummer1 + nummer2 + 5 print (add_numbers_and_five (nummer1 = 4, nummer2 = 3))
Als je nog steeds niet zeker bent wat betreft de punt van lambda's, duikt het volgende gedeelte op en help je het licht te zien.
Python Lambdas met kaart, filter en verkleinen
De kernbibliotheek van Python 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, waarbij de lijst met gewijzigde elementen wordt geretourneerd als een kaartobject. De lijst functie wordt gebruikt om het resulterende kaartobject opnieuw in een lijst om te zetten.
Hier is hoe je kaart te gebruiken zonder een lambda:
list1 = [2, 4, 6, 8] print (lijst1) def add_five (number): return number + 5 new_list = list (map (add_five, list1)) print (nieuwe_lijst)
Deze kaartfunctie is best handig, maar het zou beter kunnen. de add_five functie wordt als een argument doorgegeven, maar wat als u niet elke keer een functie wilt maken als u de kaart gebruikt? Je kunt in plaats daarvan een lambda gebruiken!
Hier is hoe die code eruit ziet, alleen met de functie vervangen door een lambda:
list1 = [2, 4, 6, 8] print (lijst1) new_list = lijst (map (lambda x: x + 5, lijst1)) print (nieuwe_lijst)
Zoals je kunt zien, het geheel add_five functie is niet langer vereist. In plaats daarvan wordt de lambda-functie gebruikt om dingen netjes te houden.
Met de filter functie, het proces is vrijwel hetzelfde. Filter neemt een functie en past deze toe op elke elemen in een lijst en creëerde een nieuwe lijst met alleen de elementen die ervoor zorgden dat de functie True retourneerde.
Eerst zonder lambda's:
getallen = [1, 4, 5, 10, 20, 30] afdrukken (getallen) 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 hij wordt een beetje lang. Laten we eens kijken hoeveel regels een lambda kan verwijderen:
getallen = [1, 4, 5, 10, 20, 30] afdrukken (nummers) new_numbers = lijst (filter (lambda x: x> 10, nummers)) print (nieuwe nummers)
De lambda-functie heeft de behoefte aan het geheel vervangen greater_than_ten_func! En het is gebeurd in vijf eenvoudige woorden. Dit is de reden waarom lambda's krachtig zijn: ze verminderen rommel voor eenvoudige taken.
Eindelijk, laten we eens kijken verminderen. Reduce is nog een coole Python-functie. Het past een doorlopende berekening toe op alle items in een lijst. U kunt dit gebruiken om een optellingstotaal bij te houden, of om alle getallen samen te vermenigvuldigen:
van functools import reduceer aantallen = [10, 20, 30, 40] print (cijfers) def summer (a, b): return a + b resultaat = verminder (zomer, cijfers) print (resultaat)
Dit voorbeeld moet importeren verminderen van de functools module, maar maak je geen zorgen, de module functools maakt deel uit van de kernbibliotheek van Python.
Het verhaal is vrijwel hetzelfde met een lambda, er is geen behoefte aan een functie:
van functools import reduceer aantallen = [10, 20, 30, 40] print (cijfers) result = verminder (lambda a, b: a + b, nummers) print (resultaat)
Dingen om op te letten met Python Lambdas
Deze voorbeelden hebben aangetoond hoe eenvoudig lambda-functies zijn, samen met de kaart, filter en verkleinen, van de kernbibliotheek van Python. Toch zijn er een paar toepassingen waar lambda-functies niet helpen.
Als u iets meer dan een basistaak doet of andere methoden wilt gebruiken, gebruikt u een normale functie. Lambda's zijn geweldig voor eenmalige, anonieme functies, maar ze mogen maar één uitdrukking hebben. Als je lambda er uitziet als een reguliere expressie, dan is het waarschijnlijk tijd om je te richten op een speciale methode.
Raadpleeg onze gids voor meer informatie over objectgericht programmeren in Python A Beginnershandleiding voor Python Objectgericht programmeren Een beginnershandleiding voor Python Objectgericht programmeren Om ten volle te profiteren van de sterke punten van Python, wil je leren hoe Python werkt met objectgeoriënteerd programmeren (OOP). Lees meer en bekijk onze FAQ-gids voor Python-beginners De meestgestelde vragen over Python-programmeren De meestgestelde vragen over Python-programmering In dit artikel zullen we u alles vertellen over Python als beginner. Lees verder .
Ontdek meer over: Codeerhandleiding, Python.