Python Academy · leksjon

Partielle funksjoner

Bruk functools.partial

Leksjon 4 av 413 trinn

Partielle funksjoner er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva er en partial?

functools.partial oppretter en ny funksjon der noen argumenter til en eksisterende funksjon allerede er fylt ut. Det er som å forhåndslaste argumenter, slik at De kan kalle resultatet med færre argumenter.

Importer den med from functools import partial.

from functools import partial
def power(base, exp):
    return base ** exp
square = partial(power, exp=2)
print(square(5))

Fylle ut posisjonelle argumenter

Posisjonelle argumenter som sendes til partial, fyller funksjonens parametere fra venstre. De resterende argumentene oppgis når De kaller partial-funksjonen.

from functools import partial
def multiply(a, b):
    return a * b
double = partial(multiply, 2)
print(double(10))
print(double(50))

Fylle ut nøkkelordargumenter

Nøkkelordargumenter som oppgis til partial, blir standardverdier som De fortsatt kan overstyre ved kalltidspunktet.

from functools import partial
def greet(name, greeting='Hello'):
    return greeting + ', ' + name
hola = partial(greet, greeting='Hola')
print(hola('Ada'))
print(hola('Bob', greeting='Hey'))

Partials med innebygde funksjoner

De kan også lage partials av innebygde funksjoner. Her lager vi en heltallsparser for grunntall 2 fra int.

from functools import partial
binary = partial(int, base=2)
print(binary('1010'))
print(binary('1111'))

Ryddigere callback-funksjoner

Partials er nyttige for callback-funksjoner der De må sende en funksjon uten argumenter eller med ett argument, men ønsker å forhåndslaste kontekst.

from functools import partial
def log(level, message):
    return '[' + level + '] ' + message
error = partial(log, 'ERROR')
print(error('disk full'))

Partials i map

En partial passer godt inn i høyereordensfunksjoner som map, der ett argument låses mens det andre varierer for hvert element.

from functools import partial
def add(a, b):
    return a + b
add10 = partial(add, 10)
print(list(map(add10, [1, 2, 3])))

Undersøke en partial

Et partial-objekt eksponerer den innpakkede funksjonen via .func, de faste posisjonelle argumentene via .args og de faste nøkkelordargumentene via .keywords.

from functools import partial
def f(a, b, c):
    return (a, b, c)
p = partial(f, 1, c=3)
print(p.func.__name__)
print(p.args)
print(p.keywords)

Stable partials

De kan bygge en partial fra en annen partial og legge til flere faste argumenter trinn for trinn.

from functools import partial
def volume(l, w, h):
    return l * w * h
base = partial(volume, 2)
slab = partial(base, 3)
print(slab(4))

Partial kontra lambda

En lambda kan gjøre den samme jobben, men partial er ofte tydeligere når argumenter skal låses, og eksponerer den innpakkede funksjonen for introspeksjon.

from functools import partial
def power(base, exp):
    return base ** exp
cube_p = partial(power, exp=3)
cube_l = lambda b: power(b, 3)
print(cube_p(2), cube_l(2))

Et praktisk eksempel: avrunding

Lag en funksjon som avrunder til to desimaler, ved å lage en partial av den innebygde funksjonen round.

from functools import partial
round2 = partial(round, ndigits=2)
print(round2(3.14159))
print(round2(2.71828))

partialmethod for klasser

Den beslektede functools.partialmethod gjør det samme for metoder i en klassedefinisjon: Den fyller ut argumenter på forhånd for en metode.

from functools import partialmethod
class Light:
    def set(self, state):
        self.state = state
        return state
    on = partialmethod(set, True)
    off = partialmethod(set, False)
l = Light()
print(l.on())
print(l.off())

Kontrollspørsmål

Hva gjør functools.partial?

Oppsummering: partial-funksjoner

De har lært at functools.partial:

  • oppretter en ny funksjon med noen forhåndsutfylte argumenter, enten posisjonelle eller som nøkkelordargumenter.
  • lar Dem overstyre forhåndsinnstilte standardverdier for nøkkelordargumenter ved kalltidspunktet.
  • egner seg godt for callback-funksjoner, map og for å redusere gjentakelser.
  • eksponerer .func, .args og .keywords, og har en metodevariant kalt partialmethod.
from functools import partial
add = lambda a, b: a + b
plus1 = partial(add, 1)
print(plus1(41))
Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «Partielle funksjoner» gratis?

Ja – hele teksten i «Partielle funksjoner» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Partielle funksjoner»?

Bruk functools.partial Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Partielle funksjoner»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Funksjoner som førsteklasses objekter
  2. Closures og frie variabler
  3. nonlocal og foranderlig tilstand
  4. Partielle funksjoner
← Tilbake til Python Academy