Курс по усъвършенствано разработване с Python
Глава
>
Ниво
Напреднали функции
Ламбда функции
Цел
Използвайте лямбда функции, за да документирате някои консумативи, така че да могат да бъдат събрани за по-нататъшна доставка.
Някои от плодовете и ягодите в полето са почти готови за прибиране, за да могат да бъдат съхранени, изпратени и продадени. Би било добра идея да запишете предметите, които са почти готови, така че да имате приблизителна оценка за броя на продуктите от това поле, които се опаковат и изпращат.
За да оптимизирате кода си, може да използвате лямбда функции, което е друг начин за създаване на потребителски функции, но е по-бърз, когато функциите, които създавате, са по-прости.
# Normal Custom Function
def calculate(x , y , z) :
return( (x+y+z) *2 )
# Lambda Function
calculate = lambda x,y,z : (x + y + z) * 2
В примера по-горе имате две функции, една потребителска функция и една лямбда функция. Въпреки че са написани по различен начин, те функционират еднакво. Ламбда функцията е просто по-лесна за използване и може да бъде зададена бързо на място в средата на кода. Това казано, стандартният метод за дефиниране на функции остава много полезен за по-сложни кодови последователности.
В полето има два (2) вида предмети, които могат да бъдат категоризирани: "fruits" и "berries". От тези два (2) вида има три (3) плода: apples, pears и oranges; и има три (3) вида ягоди: red, blue и purple.
Първо, настройте лямбда функцията, показана по-горе, с името calculate. Това ще ни позволи да изчислим броя на предвидените предмети за сезона чрез събиране на три стойности и умножаването им по две (2). Създайте още една лямбда функция с името estimate, за да оцените броя на предметите, които ще бъдат събрани, като използвате потребителската функция speak. Накрая, настройте лямбда функцията с името 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 знак и използвайте лямбда функцията calculate() с всички три плодови променливи, и запазете стойността в потребителска променлива с име fruit_number, както следва: fruit_number = calculate(orange,pear,apple). След това използвайте лямбда функцията estimate() с fruit_number като число и "fruits" като име, както следва: estimate(fruit_number, "fruits" ).
След като приключите с плодовете, отидете до светлия X знак и направете същото с ягодите. Създайте променливи за трите (3) вида ягоди със съответния брой храсти, които броите в полето, след което настройте лямбда функцията по същия начин, както при плодовете, както следва: berry_number = calculate(red,blue,purple). Използвайте лямбда функцията 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)
Завършете, като използвате лямбда функцията estimate() с променливата season като числов аргумент и "products" като име, за да завършите нивото.