Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Προχωρημένες Συναρτήσεις
Συναρτήσεις Lambda
Στόχος
Χρησιμοποιήστε συναρτήσεις 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 function. Αν και γράφονται διαφορετικά, λειτουργικά είναι οι ίδιες. Η lambda function είναι απλά ευκολότερη στη χρήση και μπορεί να οριστεί γρήγορα "στη στιγμή" κατά τη διάρκεια του κώδικα. Παρόλα αυτά, η κανονική μέθοδος ορισμού συναρτήσεων παραμένει πολύ χρήσιμη για πολύπλοκες ακολουθίες κώδικα.
Υπάρχουν δύο (2) τύποι αντικειμένων που μπορούν να κατηγοριοποιηθούν στο χωράφι: "fruits" και "berries". Από αυτούς τους δύο (2) τύπους, υπάρχουν τρία (3) φρούτα: apples, pears και oranges; και υπάρχουν τρία (3) μούρα: red, blue και purple.
Πρώτα, ορίστε τη lambda function που παρουσιάζεται παραπάνω με το όνομα calculate, η οποία θα μας επιτρέψει να προκύψει ο αριθμός των αντικειμένων που προβλέπονται για τη σεζόν, προσθέτοντας τρία αντικείμενα και πολλαπλασιάζοντάς τα επί δύο (2). Δημιουργήστε μια άλλη lambda function με το όνομα estimate ώστε να εκτιμήσετε τα αντικείμενα που θα συλλεχθούν, ως μια προσαρμοσμένη συνάρτηση ομιλίας. Τέλος, ορίστε μια lambda function με το όνομα 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 function calculate() με όλες τις τρεις μεταβλητές φρούτων, και αποθηκεύστε την τιμή σε μια προσαρμοσμένη μεταβλητή με το όνομα fruit_number, ως εξής: fruit_number = calculate(orange,pear,apple). Συνέχεια, χρησιμοποιήστε τη lambda function estimate() με το fruit_number ως τον αριθμό και το "fruits" ως το όνομα, ως εξής: estimate(fruit_number, "fruits").
Μόλις ολοκληρώσετε τα φρούτα, περπατήστε προς το ανοιχτό σημάδι X και κάντε το ίδιο με τα μούρα. Ορίστε μεταβλητές για τα τρία (3) μούρα με τον αριθμό των θάμνων που μετράτε στο χωράφι, και στη συνέχεια ορίστε τη lambda function με τον ίδιο τρόπο που κάνατε για τα φρούτα, ως εξής: berry_number = calculate(red,blue,purple). Χρησιμοποιήστε τη lambda function 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 function estimate() με τη μεταβλητή season ως αριθμητικό όρισμα και το "products" ως όρισμα ονόματος, ώστε να ολοκληρώσετε το επίπεδο.