Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom
Zaawansowane Funkcje
Funkcje Lambda
Cel
Użyj funkcji lambda do udokumentowania kilku materiałów eksploatacyjnych, aby mogły być później zebrane do wysyłki.
Część owoców i jagód na polu jest już prawie gotowa do zbioru, dzięki czemu mogą być przechowywane, wysyłane i sprzedawane. Dobrym pomysłem byłoby spisanie elementów, które są prawie gotowe, aby mieć oszacowanie, ile produktów z tego pola jest pakowanych i wysyłanych.
Aby zoptymalizować swój kod, możesz użyć funkcji lambda, czyli innego sposobu tworzenia funkcji niestandardowych, który jest szybszy, gdy funkcje, które tworzysz, są prostsze.
# Normal Custom Function
def calculate(x , y , z) :
return( (x+y+z) *2 )
# Lambda Function
calculate = lambda x,y,z : (x + y + z) * 2
W powyższym przykładzie mamy dwie funkcje, funkcję niestandardową oraz funkcję lambda. Mimo, że są napisane inaczej, działają funkcjonalnie tak samo. Funkcja lambda jest po prostu łatwiejsza w użyciu i można ją szybko ustawić w trakcie kodu. Należy jednak pamiętać, że tradycyjna metoda definiowania funkcji nadal jest bardzo przydatna w przypadku skomplikowanych sekwencji kodu.
Na polu można sklasyfikować dwa (2) rodzaje elementów: "fruits" oraz "berries". Spośród tych dwóch (2) rodzajów, istnieją trzy (3) owoce: apples, pears oraz oranges; oraz trzy (3) rodzaje jagód: red, blue oraz purple.
Najpierw ustaw funkcję lambda ilustrowaną powyżej o nazwie calculate, co pozwoli nam uzyskać liczbę przewidywanych elementów na sezon przez dodanie trzech elementów i pomnożenie ich przez dwa (2). Następnie utwórz kolejną funkcję lambda o nazwie estimate, aby oszacować zbierane elementy, jako funkcję wypowiadania niestandardowego. Na koniec ustaw funkcję lambda o nazwie total, która dodaje dwie wartości i odejmuje trzecią wartość nazwaną 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)
Utwórz zmienne dla każdego z trzech (3) owoców i dodaj liczbę, ile poszczególnych jest na polu. Udaj się do ciemnego znaku X i użyj funkcji lambda calculate() z trzema zmiennymi dla owoców, a następnie zapisz wartość w zmiennej niestandardowej o nazwie fruit_number, w następujący sposób: fruit_number = calculate(orange,pear,apple). Następnie użyj funkcji lambda estimate() z fruit_number jako liczbą oraz "fruits" jako nazwą, w następujący sposób: estimate(fruit_number, "fruits" ).
Gdy skończysz z owocami, udaj się do jasnego znaku X i wykonaj to samo z jagodami. Utwórz zmienne dla trzech (3) rodzajów jagód z liczbą krzewów, które policzyłeś na polu, a następnie ustaw funkcję lambda w taki sam sposób, jak dla owoców, w następujący sposób: berry_number = calculate(red,blue,purple). Użyj funkcji lambda estimate() z berry_number oraz "berries" jako argumentami.
Istnieje stała o nazwie doc, która zawiera oszacowania utraconego produktu z poprzedniego miesiąca. Udaj się do magazynu, podejdź do złotego znaku X i użyj funkcji speak() ze stałą, aby odczytać dokument leżący na stole, co pozwoli ci określić liczby z poprzedniego miesiąca.
Gdy już poznasz liczby z poprzedniego miesiąca, podejdź do ciemnego znaku X na fioletowym dywanie, staw czoła stołowi, aby określić łączną liczbę produktów na ten miesiąc. Utwórz zmienną o nazwie season do obliczenia łącznych wyników sezonu, używając fruit_number i berry_number jako liczb oraz liczby uzyskanej ze stałej doc jako argumentu loss, w następujący sposób: season = total(berry_number,fruit_number, number found in doc constant)
Na zakończenie użyj funkcji lambda estimate() z zmienną season jako argumentem liczby oraz "products" jako argumentem nazwy, aby ukończyć poziom.