Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Haladó Függvények
Zárások
Célkitűzés
Szabályozd a gazdaság vízellátását zárások beállításával és használatával.
Négy víztartály van megtervezve, hogy öntözzék a környező mezőgazdasági területeket, ideje átváltani őket annak érdekében, hogy a megfelelő mennyiségű víz kerüljön a megfelelő helyekre. Ennek érdekében sokkal könnyebbé tehetjük a feladatot a zárások használatával.
A zárások egymásba ágyazott függvények, melyek célja az adatok kapszulázása, ez csökkenti a használt változók számát, és elrejti az adatokat a függvényen belül, így külsőleg nem manipulálhatók, más szóval "lezárja" a függvényt.
Annak érdekében, hogy szabályozzuk a tartályok vízszintjét, létrehozunk egy egymásba ágyazott függvényt, amely szorzóként működik. Ez a függvény ugyanolyan módon működik, mint egy ciklus: a külső függvény, melynek neve multiplier_of(), egy olyan paramétert vár, melyet az belső, multiplier() nevű függvény argumentumával szoroz meg.
# Nested Function
def multiplier_of(n):
def multiplier(number):
return number*n
return multiplier
A beállítás után zárjuk le a függvényt a zárások alkalmazásával, így megakadályozva a hozzáférést az értékeikhez, és megszilárdítva használatukat.
# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]
A fenti zárás neve multiply_by_2(), és a korábban létrehozott egymásba ágyazott függvényt használja egy megadott argumentummal, ami ebben az esetben a 2, azaz a zárás úgy van beállítva, hogy bármely számot kettővel szorozzon. Ennek eredményeként bármely argumentumként hozzáadott számot kettővel szoroz, és ezt az értéket mivel lezártuk, nem lehet megváltoztatni.
Térjünk rá a tartályok vízellátásának szabályozására: állíts be három (3) zárást: multiply_by_2, multiply_by_3 és multiply_by_5. Mindegyiket kézzel konfiguráld ugyanazzal a formátummal, mint az előző példában: multiply_by_2 = multiplier_of(2).
Ebben a szinten van egy tanks nevű szótári állandó, amely hat (6) színt tartalmaz indexként: "red", "blue", "orange", "purple", "yellow" és "green". Minden indexhez tartozik egy szám, amely azt mutatja, mennyi víz áramlik a tartály oldalán, ezt a számot fogjuk használni a tartály szabályozásához a korábban tárgyalt "multiply_by" zárások segítségével.
Ennek megkönnyítésére létrehozunk egy regulate_water() nevű függvényt a szerkesztőben, amely két argumentumot vesz fel: a színt, amely az előbb ismertetett indexeket reprezentálja, és a szorzó függvényt, amely a használni kívánt zárás. A függvény használatának egyik példája a következő: regulate_water("red", multiply_by_2).
Menj a sötét X-ekkel jelölt színes szőnyegekhez, állj szembe a tartályokkal, használd a regulate_water() függvényt, és add meg a szőnyeg színét első argumentumként, valamint a megfelelő szorzó zárást második argumentumként. Az egyes színes szőnyegekhez használandó szorzók a következők:
multiply_by_2 - "red" és "green" multiply_by_3 - "blue" és "purple" multiply_by_5 - "orange" és "yellow"
Szabályozd a vízellátást minden tartály oldalán, hogy teljesítsd a szintet.