Edistynyt Python-kehityskurssi
Luku
>
Taso
Edistyneet funktiot
Osittaiset funktiot
Tavoite
Pakkaa ja sijoita telakalle toimitetut rakennusmateriaalit käyttämällä osittaisia funktioita.
Muutama tarve on juuri toimitettu telakalle, ja ne tulisi pakata sekä varastoida, jotta niitä voidaan käyttää rakennusmateriaaleina. Materiaalit täytyy kääriä kankaaseen ja sitoa langalla. On tärkeää punnita kaikki esineet pakatessa, jotta niiden myöhempi kuljetus on tehokasta. Tämän helpottamiseksi voimme optimoida prosessin käyttämällä osittaisia funktioita.
Osittainen funktio on mukautettu funktio, jota on lyhennetty siten, ettei tarvitse lisätä enimmäkseen vakiossa arvoja olevia argumentteja. Tämä mahdollistaa funktioiden käyttämisen, jotka ottavat useita argumentteja, suorittamalla ne vain yhdellä argumentilla tai millä tahansa valitsemallasi määrällä.
from functools import partial
Aloittaaksesi sinun on tuontava partial moduulista nimeltä functools, mikä mahdollistaa osittaisten funktioiden luomisen. Koodin tuonti tapahtuu aina koodieditorin yläosassa.
Määritä funktio nimeltä weight ja anna sen ottaa kolme (3) argumenttia: thread, cloth ja material. Tämä funktio mahdollistaa pakattujen materiaalien painon laskemisen, ja tätä prosessia voimme optimoida edelleen ohjaamalla sen osittaisen funktion kautta.
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
Luo osittainen funktio nimeltä package. Se määritellään samalla tavalla kuin lambda-funktiot. Käytä partial()-funktiota täyttääksesi funktion ja lisää siihen funktion nimi sekä kiinteät arvot niille argumenteille, jotka haluat asettaa.
Kaikki alkuperäisen funktion argumentit, joita et aseta, muuttuvat argumenteiksi, jotka osittainen funktio määrittelee. package()-osittaisessa funktiossa kyse on material-argumentista.
Kävele tummien X-merkkien luo arkkujen edessä noutaaksesi pakkauksen materiaalit. Keltaisella matolla olevassa X-merkissä käytä collect()-funktiota hankkiaksesi "thread" ja kävele violettisella matolla olevaan X-merkkiin ja käytä collect()-funktiota hankkiaksesi "cloth". Näitä esineitä käytetään materiaalien pakkaukseen.
Kävele telakan poikki ja kerää kaikki rakennusmateriaalit, nämä ovat: bricks, planks, red_bricks ja wood. Kun olet kerännyt ne, lisää kunkin osalta kerätty määrä kyseistä materiaalia kuvaavaan muuttujaan, esimerkiksi: bricks = 3.
Sen jälkeen kävele kevyiden X-merkkien luo arkkujen edessä ja laske jokaisen rakennusmateriaalin paino ennen niiden varastointia. Käytä speak()-funktiota yhdessä package()-osittaisen funktion kanssa painon laskemiseksi. Käytä materiaalimuuttujia package()-funktion argumentteina, esimerkiksi:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
Jatka käyttämällä place()-funktiota materiaalin varastoimiseen arkkuihin, tee se myös hyödyntäen package()-funktiota, kuten yllä olevassa esimerkissä.
Kevyen X-merkin kohdalla, jossa on punainen matto, punnitse ja varastoi bricks. Kevyen X-merkin kohdalla, jossa on sininen matto, punnitse ja varastoi planks. Kevyen X-merkin kohdalla, jossa on oranssi matto, punnitse ja varastoi red_bricks. Kevyen X-merkin kohdalla, jossa on vihreä matto, punnitse ja varastoi wood. Varastoi ja punnitse kaikki neljä (4) materiaalia oikeisiin arkkuihin tason suorittamiseksi.