Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Avancerade funktioner
Lambda-funktioner
Målsättning
Använd lambda-funktioner för att dokumentera vissa förnödenheter så att de kan samlas in för försändelse senare.
En del av frukterna och bären i fältet är nästan redo att plockas så att de kan lagras, skickas och säljas. Det vore en bra idé att kartlägga de objekt som nästan är klara så att du får en uppskattning av hur många produkter från detta fält som packas och skickas.
För att optimera din kod kan du använda lambda-funktioner, vilket är ett annat sätt att skapa anpassade funktioner, men det går snabbare när de funktioner du skapar är enklare.
# Normal Custom Function
def calculate(x , y , z) :
return( (x+y+z) *2 )
# Lambda Function
calculate = lambda x,y,z : (x + y + z) * 2
I exemplet ovan har du två funktioner, en anpassad funktion och en lambda-funktion. Även om de är skrivna på olika sätt, fungerar de på samma sätt; lambda-funktionen är bara lättare att använda och kan snabbt sättas upp direkt mitt i koden. Med det sagt är den vanliga metoden att definiera funktioner fortfarande mycket användbar för komplexa kodsekvenser.
Det finns två (2) typer av objekt som kan kategoriseras i fältet: "fruits" och "berries". Av dessa två (2) typer finns det tre (3) frukter: apples , pears och oranges; och det finns tre (3) bär: red , blue och purple.
Börja med att sätta upp den ovan illustrerade lambda-funktionen med namnet calculate, detta gör att vi kan få antalet objekt som förväntas under säsongen genom att addera tre objekt och multiplicera dem med två (2). Skapa en annan lambda-funktion med namnet estimate för att uppskatta de objekt som kommer att samlas in, som en anpassad speak-funktion. Slutligen, sätt upp en lambda-funktion med namnet total som adderar två värden och subtraherar ett tredje värde med namnet 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)
Skapa variabler för var och en av de tre (3) frukterna och ange antalet av varje som finns i fältet. Gå till den mörka X-markeringen och använd lambda-funktionen calculate() med alla tre fruktvariablerna, och lagra värdet i en anpassad variabel med namnet fruit_number, så här: fruit_number = calculate(orange,pear,apple). Följ sedan upp med att använda lambda-funktionen estimate() med fruit_number som tal och "fruits" som namn, så här: estimate(fruit_number, "fruits" ).
När du är klar med frukten, gå till den ljusa X-markeringen och gör samma sak med bären. Sätt upp variabler för de tre (3) bären med antalet buskar du räknar i fältet, och sätt sedan upp lambda-funktionen på samma sätt som du gjorde med frukten, så här: berry_number = calculate(red,blue,purple). Använd lambda-funktionen estimate med berry_number och "berries" som argument.
Det finns en konstant med namnet doc som innehåller förra månadens uppskattningar för förlorade produkter. Gå vidare till lagerhuset, gå mot den gyllene X-markeringen och använd funktionen speak() med konstanten för att läsa ett dokument på bordet så att du kan fastställa förra månadens siffror.
När du känner till förra månadens siffror, gå till den mörka X-markeringen över den lila mattan, vänd dig mot bordet så att du kan fastställa totalsiffrorna för denna månad. Skapa en variabel med namnet season för att beräkna säsongens totala antal, använd fruit_number och berry_number som talen, och använd det nummer du fick från doc som förlustargument, så här: season = total(berry_number,fruit_number, number found in doc constant)
Avsluta med att använda lambda-funktionen estimate() med variabeln season som talargument och "products" som namnargument för att slutföra nivån.