Поглиблений курс розробки на Python
Розділ
>
Рівень
Поглиблені функції
Замикання
Мета
Регулюйте подачу води на фермі, налаштовуючи та використовуючи замикання.
Є чотири водні баки, призначені для зрошення навколишніх земель, настав час їх перемкнути, щоб переконатися, що правильна кількість води розподіляється у потрібні місця. Для цього ми можемо значно полегшити завдання, використовуючи замикання.
Замикання — це вкладені функції, призначені для інкапсуляції даних. Це зменшує кількість змінних, які потрібно використовувати, і приховує дані всередині функції, тому ними не можна керувати зовнішніми засобами, іншими словами, функція закривається.
Щоб регулювати воду в баках, ми створимо вкладену функцію, що працює як множник. Ця функція працює так само, як цикл: зовнішня функція під назвою multiplier_of() приймає аргумент, який множиться на аргумент її внутрішньої функції під назвою multiplier().
# Nested Function
def multiplier_of(n):
def multiplier(number):
return number*n
return multiplier
Після налаштування нам потрібно закрити функцію, створивши замикання, що запобігає доступу до їхніх значень і забезпечує їх правильне використання.
# 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]
Вище наведене замикання називається multiply_by_2() і використовує створену нами вкладену функцію з встановленим аргументом, а саме 2, що є числом, на яке замикання налаштоване множити. Внаслідок цього будь-яке число, яке ми додамо як аргумент, буде помножене на два (2), і цю властивість не можна змінити через замикання.
Переходячи до регулювання водних баків, налаштуйте три (3) замикання: multiply_by_2, multiply_by_3 і multiply_by_5. Налаштуйте кожне з них вручну, використовуючи той самий формат, що і в попередньому прикладі, наприклад: multiply_by_2 = multiplier_of(2).
У цьому рівні є константа-словник під назвою tanks, який як індекси містить шість (6) кольорів: `“red