Продвинутый курс разработки на Python
Глава
>
Уровень
Продвинутые функции
Лямбда-функции
Цель
Используйте lambda-функции для документирования некоторых расходных материалов, чтобы их можно было собрать для последующей доставки.
Некоторые фрукты и ягоды на поле почти готовы к сбору, чтобы их можно было хранить, отправлять и продавать. Было бы неплохо записать предметы, которые почти готовы, чтобы у вас была оценка того, сколько продуктов с этого поля упаковывается и отправляется.
Для оптимизации вашего кода вы можете использовать lambda-функции, это еще один способ создания пользовательских функций, но он быстрее, когда создаваемые функции проще.
# Normal Custom Function
def calculate(x , y , z) :
return( (x+y+z) *2 )
# Lambda Function
calculate = lambda x,y,z : (x + y + z) * 2
В приведенном выше примере у вас есть две функции, пользовательская функция и lambda-функция. Хотя они записаны по-разному, их функциональность одинакова, lambda-функция просто проще в использовании и может быть быстро создана на лету в середине кода. Тем не менее, обычный способ определения функций по-прежнему очень полезен для сложных последовательностей кода.
Существует два (2) типа предметов, которые можно классифицировать на поле: "fruits" и "berries". Из этих двух (2) типов, есть три (3) фрукта: apples, pears и oranges; и три (3) ягоды: red, blue и purple.
Сначала настройте lambda-функцию, изображенную выше, с именем calculate, которая позволит нам получить количество предметов, предсказанных на сезон, путём сложения трёх элементов и умножения их на два (2). Создайте другую lambda-функцию с именем estimate для оценки собираемых предметов, как пользовательскую функцию speak. Наконец, настройте lambda-функцию с именем total, которая складывает два значения и вычитает третье значение, названное loss.
# Calculate items calculate = lambda x,y,z : (x + y + z) * 2 # Estimate items estimate = lambda number , name : player.speak( "I estimate %d %s this season" % (number,name) ) # Total all items total = lambda num1, num2, loss : ( (num1 + num2) - loss)
Создайте переменные для каждого из трех (3) фруктов и добавьте количество каждого на поле. Пройдите к темной метке X и используйте lambda-функцию calculate() со всеми тремя переменными фруктов, и сохраните значение в пользовательской переменной с именем fruit_number, например: fruit_number = calculate(orange,pear,apple). Затем используйте lambda-функцию estimate() с использованием fruit_number в качестве числа и "fruits" в качестве имени, например: estimate(fruit_number, "fruits" ).
После того, как вы закончите с фруктами, пройдите к светлой метке X и сделайте то же самое с ягодами. Настройте переменные для трех (3) ягод с количеством кустов, которое вы посчитали на поле, затем настройте lambda-функцию так же, как с фруктами, например: berry_number = calculate(red,blue,purple). Используйте lambda-функцию estimate с berry_number и "berries" в качестве аргументов.
Существует константа с именем doc, которая содержит оценки прошлых месяцев для утраченной продукции. Перейдите в склад, пройдите к золотой метке X и используйте функцию speak() с этой константой, чтобы прочитать документ на столе и определить числа прошлого месяца.
После того как числа прошлого месяца станут вам известны, пройдите к темной метке X на фиолетовом ковре, встаньте лицом к столу, чтобы определить итоги этого месяца. Создайте переменную с именем season, чтобы вычислить итоги сезона: используйте fruit_number и berry_number в качестве чисел, и используйте число, определенное из константы doc, в качестве аргумента потерь, например: season = total(berry_number,fruit_number, number found in doc constant)
Завершите уровень, используя lambda-функцию estimate() с переменной season в качестве числа и "products" в качестве названия.