Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Avanserte funksjoner
Partielle funksjoner
Mål
Pakk og plasser bygningsmaterialer som ble levert til brygga ved hjelp av partial functions.
Noen forsyninger har nettopp blitt levert til en brygge, og de skal pakkes og lagres slik at de kan brukes som byggematerialer. Materialene må pakkes inn i klut og knyttes med tråd. Det er viktig å veie alle elementene når du pakker dem, slik at de kan transporteres effektivt senere. For å lette dette kan vi optimalisere prosessen ved hjelp av Partial Functions.
En Partial Function er en egendefinert funksjon som er forkortet ved at du ikke trenger å legge til argumentverdier som stort sett er konsistente. Dette lar deg bruke funksjoner som tar flere argumenter og kjøre dem med bare ett argument eller et hvilket som helst antall argumenter du velger.
from functools import partial
For å begynne må du importere partial fra modulen kjent som functools, dette gjør at du kan opprette Partial Functions. Importering av kode plasseres alltid øverst i kodeditoren.
Sett opp en funksjon kalt weight og la den ta tre (3) argumenter: thread, cloth og material. Denne funksjonen lar deg beregne vekten av de pakkede materialene, og vi kan optimalisere denne prosessen ytterligere ved å kanalisere den gjennom en partial function.
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
Lag en Partial Function kalt package; den settes opp på en lignende måte som lambda-funksjoner. Bruk partial() for å fylle ut funksjonen og legg til navnet på funksjonen samt faste verdier for de argumentene du ønsker å tilordne.
Alle argumenter fra den originale funksjonen du ikke tilordner, vil bli de argumentene som må tilordnes av den Partial Function. I tilfellet med package() Partial Function, er det material-argumentet.
Gå til de mørke X-markeringene foran kasser for å hente pakkeutstyr. På det gule teppets X-merke, bruk collect()-funksjonen for å hente "thread" og gå til det lilla teppets X-merke og bruk collect()-funksjonen for å hente "cloth". Disse elementene vil bli brukt for å pakke materialene.
Gå over brygga og hent alle byggematerialene, disse er: bricks, planks, red_bricks og wood. Når du har samlet dem, legg antallet du har samlet av hver til en variabel med samme navn som materialet, for eksempel: bricks = 3.
Deretter, gå til de lyse X-markeringene foran kassene og beregn vekten av hvert byggemateriale før du lagrer det. Bruk speak()-funksjonen sammen med package() Partial Function for å beregne vekten. Bruk materialvariablene som argumenter for package()-funksjonen, for eksempel:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
Fortsett med å bruke place()-funksjonen for å lagre materialet inne i kassene, og gjør dette ved å bruke package()-funksjonen, slik som i eksempelet ovenfor.
På det lyse X-merket med det røde teppet, vei og lagre bricks. På det lyse X-merket med det blå teppet, vei og lagre planks. På det lyse X-merket med det oransje teppet, vei og lagre red_bricks. På det lyse X-merket med det grønne teppet, vei og lagre wood. Lagre og vei alle fire (4) materialer i de riktige kassene for å fullføre nivået.