Курс по усъвършенствано разработване с Python
Глава
>
Ниво
Разширени функции
Частични функции
Цел
Опаковайте и подрежете строителни материали, доставени до дока, като използвате частични функции.
Някои доставки току-що пристигнаха до дока, те трябва да бъдат опаковани и съхранени, за да могат да се използват като строителни материали. Материалите трябва да бъдат увити в плат и завързани с конец. Важно е да се претеглят всички артикули по време на опаковането, за да могат по-нататък да бъдат транспортирани ефективно. За да улесним този процес, можем да го оптимизираме чрез използването на Частични Функции.
Частична Функция е потребителска функция, която е съкратена, защото не е необходимо да се задават стойности на аргументи, които са в голяма степен постоянни. Това ви позволява да използвате функции, които приемат няколко аргумента, и да ги извиквате с само един аргумент или толкова, колкото изберете.
from functools import partial
За да започнете, трябва да импортирате partial от модула, известен като functools, това ще ви позволи да създавате Частични Функции. Импортирането на кода винаги се поставя в горната част на редактора на кода.
Създайте функция с име weight и я направете да приема три(3) аргумента: thread, cloth и material. Тази функция ще ви позволи да изчислите теглото на опакованите материали, като можем да оптимизираме този процес допълнително чрез пренасочването му през частична функция.
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
Създайте Частична Функция с име package, тя се настройва по подобен начин като lambda функциите. Използвайте partial() за попълване на функцията и добавете името на функцията, както и фиксирани стойности за аргументите, които искате да зададете.
Всеки аргумент от оригиналната функция, който не зададете, ще стане аргумент, който трябва да бъде зададен от Частичната Функция. В случая на Частичната Функция package(), това е аргументът material.
Отидете при тъмните X марки пред контейнерите, за да вземете опаковъчни материали. На жълтия килим с X марки, използвайте функцията collect() за да съберете "thread" и отидете при лилавия килим с X марки, за да използвате функцията collect() за да съберете "cloth". Тези артикули ще бъдат използвани за опаковане на материалите.
Прекосете дока и вземете всички строителни материали, тези са: bricks, planks, red_bricks и wood. След като ги съберете, добавете броя, който сте събрали от всеки, към променлива с името на материала, например: bricks = 3.
След това отидете до светлите X марки пред контейнерите и изчислете теглото на всеки строителен материал, преди да го съхраните. Използвайте функцията speak() заедно с Частичната Функция package(), за да изчислите теглото. Използвайте променливите на материалите като аргументи за функцията package(), например:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
След това използвайте функцията place() за да съхраните материала в контейнерите, направете го, като използвате функцията package(), както е показано в примера по-горе.
На светлата X марка с "red" килим претеглете и съхранете bricks. На светлата X марка с "blue" килим претеглете и съхранете planks. На светлата X марка с "orange" килим претеглете и съхранете red_bricks. На светлата X марка с "green" килим претеглете и съхранете wood. Съхранете и претеглете всичките четири(4) материала в правилните контейнери, за да завършите нивото.