Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Logg inn

Valgte tags:

Filtrering:

Skriv ut:

Funksjoner 1: Lambda-utrykk og anonyme funksjoner (intro)

Du er kanskje vant med å lage funksjoner som kan se slik ut nå:

def adder(x,y):
    return x + y

Funksjonen har et navn "adder", to parametre, og en returverdi som er summen av de to tallene.

Ofte ser vi kun funksjonene når vi kaller på dem. Men! Funksjonsnavn er egentlig som alle andre variabler. Vi kan definere tre funksjoner og putte dem i ei liste:

def adder(x,y):
    return x + y

def subtraher(x,y):
    return x - y

def multipliser(x,y):
    return x * y

funksjoner = [adder,subtraher,multipliser]    

Da kan vi skrive ting som:

tall = funksjoner[1](10,4)
print(tall)

Utskrift:

6

Kult! Dette er faktisk en såpass vanlig ting, at man har en spesiell måte å skrive funksjoner på til dette formålet. Det gjør at vi slipper å måtte definere alle tingene hver gang, så vi sparer både tid og kodelinjer. Disse funksjonene kalles anonyme funksjoner, eller lambda-uttrykk. De er lånt fra funksjonell programmering, som mange andre ting som er vanlige i mange språk i dag.

Lambda-uttrykk bruker kodeordet "lambda".

De tre funksjonene over kan skrives rett i lista slik:

[lambda x,y: x+y,lambda x,y:x-y,lambda x,y:x*y]

Vi starter altså alle funksjonene med ordet "lambda". Så kommer parameterne x,y. Vi kan legge til så mange vi vil, som vanlig. Etter parameterne er det ett kolon ":", før vi skriver returverdien.

Det er praktisk å kunne ha funksjoner i lister og ordbøker, men det er spesielt som argumenter til andre funksjoner at lambda-uttrykk virkelig er interessante og mye brukt.

Vi kan skrive en funksjon som utfører en matematisk operasjon på alle elementene og lager ei ny liste:

def alle(liste,funksjon):
    nyliste = []
    for e in liste:
        nyliste.append(funksjon(e))

For eksempel, si vi vil kalle på funksjonen over med en funksjon som opphøyer tallene i 3:

liste = [1,2,3,4,5]
print(alle(liste,lambda x: x**3))

Da får vi:

[1, 8, 27, 64, 125]

Noen funksjoner krever at et av argumentene er en funksjon, slik som defaultdict. Da er det greit å bruke lambda-funksjoner.