Πώς να χρησιμοποιήσετε τις συναρτήσεις λάμδα στην Python [With Examples]

Σε αυτό το σεμινάριο, θα μάθετε τα πάντα για τις συναρτήσεις λάμδα στην Python – από τη σύνταξη για τον ορισμό συναρτήσεων λάμδα έως τις διαφορετικές περιπτώσεις χρήσης με παραδείγματα κώδικα.

Στην Python, τα λάμδα είναι ανώνυμες συναρτήσεις που έχουν μια συνοπτική σύνταξη και μπορούν να χρησιμοποιηθούν με άλλες χρήσιμες ενσωματωμένες συναρτήσεις. Μέχρι το τέλος αυτού του σεμιναρίου, θα έχετε μάθει πώς να ορίζετε συναρτήσεις λάμδα και πότε θα πρέπει να εξετάσετε το ενδεχόμενο να τις χρησιμοποιήσετε σε σχέση με τις κανονικές συναρτήσεις Python.

Ας ξεκινήσουμε!

Συνάρτηση Python Lambda: Σύνταξη και Παραδείγματα

Ακολουθεί η γενική σύνταξη για τον ορισμό μιας συνάρτησης λάμδα στην Python:

lambda parameter(s):return value

Στην παραπάνω γενική σύνταξη:

  • λάμδα είναι η λέξη-κλειδί που πρέπει να χρησιμοποιήσετε για να ορίσετε μια συνάρτηση λάμδα, ακολουθούμενη από μία ή περισσότερες παραμέτρους που πρέπει να λάβει η συνάρτηση.
  • Υπάρχει μια άνω τελεία που χωρίζει τις παραμέτρους και την τιμή επιστροφής.

💡 Όταν ορίζετε μια συνάρτηση λάμδα, θα πρέπει να βεβαιωθείτε ότι η τιμή επιστροφής υπολογίζεται αξιολογώντας μια παράσταση που εκτείνεται σε μια γραμμή κώδικα. Θα το καταλάβετε καλύτερα όταν κωδικοποιήσουμε παραδείγματα.

Παραδείγματα συνάρτησης Python Lambda

Ο καλύτερος τρόπος για να κατανοήσετε τις συναρτήσεις λάμδα είναι να ξεκινήσετε ξαναγράφοντας τις κανονικές συναρτήσεις Python ως συναρτήσεις λάμδα.

👩🏽‍💻 Μπορείτε να κωδικοποιήσετε σε ένα Python REPL ή στον διαδικτυακό επεξεργαστή Python του grtechpc.org.

#1. Θεωρήστε την ακόλουθη συνάρτηση square(), που παίρνει έναν αριθμό, num, ως όρισμα και επιστρέφει το τετράγωνο του αριθμού.

def square(num):
    return num*num

Μπορείτε να καλέσετε τη συνάρτηση με ορίσματα και να επαληθεύσετε ότι λειτουργεί σωστά.

>>> square(9)
81
>>> square(12)
144

Μπορείτε να αντιστοιχίσετε αυτήν την έκφραση λάμδα σε ένα όνομα μεταβλητής, ας πούμε, square1 για να κάνετε τον ορισμό της συνάρτησης πιο συνοπτικό: square1 = lambda num: num*num και στη συνέχεια να καλέσετε τη συνάρτηση square1 με οποιονδήποτε αριθμό ως όρισμα. Ωστόσο, γνωρίζουμε ότι τα λάμδα είναι ανώνυμες συναρτήσεις, επομένως θα πρέπει να αποφύγετε να τα εκχωρήσετε σε μια μεταβλητή.

Για τη συνάρτηση square(), η παράμετρος είναι num και η επιστρεφόμενη τιμή είναι num*num. Αφού τα εντοπίσουμε, μπορούμε να τα συνδέσουμε στην έκφραση λάμδα και να την καλέσουμε με ένα όρισμα, όπως φαίνεται:

>>> (lambda num: num*num)(2)
4

Αυτή είναι η έννοια της Έκφρασης Συνάρτησης Άμεσης Κλήσης, όπου καλούμε μια συνάρτηση αμέσως μετά τον ορισμό της.

#2. Στη συνέχεια, ας ξαναγράψουμε μια άλλη απλή συνάρτηση add() που παίρνει τους αριθμούς, num1 και num2, και επιστρέφει το άθροισμά τους, num1 + num2.

def add(num1,num2):
    return num1 + num2

Ας καλέσουμε τη συνάρτηση add() με δύο αριθμούς ως ορίσματα:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

Σε αυτήν την περίπτωση, το num1 και το num2 είναι οι δύο παράμετροι και η επιστρεφόμενη τιμή είναι num1 + num2.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

Οι συναρτήσεις Python μπορούν επίσης να λάβουν προεπιλεγμένες τιμές για παραμέτρους. Ας τροποποιήσουμε τον ορισμό της συνάρτησης add() και ας ορίσουμε την προεπιλεγμένη τιμή της παραμέτρου num2 σε 10.

def add(num1, num2=10):
    return num1 + num2

Στις παρακάτω κλήσεις συνάρτησης:

  • Στην πρώτη κλήση συνάρτησης, η τιμή του num1 είναι 1 και η τιμή του num2 είναι 3. Όταν μεταβιβάζετε την τιμή για το num2 στην κλήση συνάρτησης, αυτή η τιμή χρησιμοποιείται. η συνάρτηση επιστρέφει 4.
  • Ωστόσο, εάν μεταβιβάσετε μόνο ένα όρισμα (το num1 είναι 7), η προεπιλεγμένη τιμή του 10 χρησιμοποιείται για το num2. η συνάρτηση επιστρέφει 17.
>>> add(1,3)
4
>>> add(7)
17

Όταν γράφετε συναρτήσεις που λαμβάνουν προεπιλεγμένες τιμές για ορισμένες παραμέτρους ως εκφράσεις λάμδα, μπορείτε να καθορίσετε την προεπιλεγμένη τιμή κατά τον ορισμό των παραμέτρων.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Πότε πρέπει να χρησιμοποιείτε συναρτήσεις λάμδα στην Python;

Τώρα που μάθατε τα βασικά των συναρτήσεων λάμδα στην Python, ακολουθούν μερικές περιπτώσεις χρήσης:

  • Όταν έχετε μια συνάρτηση της οποίας η έκφραση επιστροφής είναι μια γραμμή κώδικα και δεν χρειάζεται να αναφέρετε τη συνάρτηση αλλού στην ίδια λειτουργική μονάδα, μπορείτε να χρησιμοποιήσετε συναρτήσεις λάμδα. Έχουμε επίσης κωδικοποιήσει μερικά παραδείγματα για να το κατανοήσουμε αυτό.
  • Μπορείτε να χρησιμοποιήσετε συναρτήσεις λάμδα όταν χρησιμοποιείτε ενσωματωμένες συναρτήσεις, όπως map(), filter() και reduce().
  • Οι συναρτήσεις λάμδα μπορούν να είναι χρήσιμες για την ταξινόμηση δομών δεδομένων Python, όπως λίστες και λεξικά.
  Πώς να δημιουργήσετε GIF από μια τηλεοπτική εκπομπή

Πώς να χρησιμοποιήσετε το Python Lambda με ενσωματωμένες συναρτήσεις

1. Χρήση Lambda με map()

Η συνάρτηση map() λαμβάνει ένα iterable και μια συνάρτηση και εφαρμόζει τη συνάρτηση σε κάθε στοιχείο του iterable, όπως φαίνεται:

Ας δημιουργήσουμε μια λίστα nums και ας χρησιμοποιήσουμε τη συνάρτηση map() για να δημιουργήσουμε μια νέα λίστα που περιέχει το τετράγωνο κάθε αριθμού στη λίστα nums. Παρατηρήστε τη χρήση της συνάρτησης λάμδα για τον ορισμό της λειτουργίας τετραγωνισμού.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Καθώς η συνάρτηση map() επιστρέφει ένα αντικείμενο χάρτη, θα πρέπει να το μεταφέρουμε σε μια λίστα.

▶️ Δείτε αυτό το σεμινάριο στη συνάρτηση map() στην Python.

2. Χρήση λάμδα με φίλτρο()

Ας ορίσουμε τους αριθμούς, μια λίστα αριθμών:

>>> nums = [4,5,6,9]

Ας υποθέσουμε ότι θέλετε να φιλτράρετε αυτήν τη λίστα και να διατηρήσετε μόνο τους περιττούς αριθμούς.

Μπορείτε να χρησιμοποιήσετε την ενσωματωμένη συνάρτηση φίλτρου() της Python.

Η συνάρτηση filter() παίρνει μια συνθήκη και μια επαναλαμβανόμενη: φίλτρο (συνθήκη, επαναλαμβανόμενο). Το αποτέλεσμα περιέχει μόνο τα στοιχεία του αρχικού iterable που ικανοποιούν τη συνθήκη. Μπορείτε να μεταφέρετε το επιστρεφόμενο αντικείμενο σε ένα επαναληπτικό Python, όπως λίστα.

  Κωδικοί δώρων State of Survival: Εξαργυρώστε τώρα

Για να φιλτράρουμε όλους τους ζυγούς αριθμούς, θα διατηρήσουμε μόνο τους περιττούς αριθμούς. Άρα η έκφραση λάμδα πρέπει να είναι λάμδα num: num%2!=0. Η ποσότητα num%2 είναι το υπόλοιπο όταν το num διαιρείται με το 2.

  • num%2!=0 είναι True όποτε το num είναι περιττό, και
  • num%2!=0 είναι False κάθε φορά που το num είναι ζυγό.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Χρήση λάμδα με μείωση()

Η συνάρτηση reduce() παίρνει ένα iterable και μια συνάρτηση. Μειώνει το iterable εφαρμόζοντας τη συνάρτηση επαναληπτικά στα στοιχεία του iterable.

Για να χρησιμοποιήσετε τη συνάρτηση reduce(), θα πρέπει να την εισαγάγετε από την ενσωματωμένη λειτουργική μονάδα της Python:

>>> from functools import reduce

Ας χρησιμοποιήσουμε τη συνάρτηση reduce() για να υπολογίσουμε το άθροισμα όλων των αριθμών στη λίστα nums. Ορίζουμε μια έκφραση λάμδα: λάμδα num1,num2:num1+num2, ως συνάρτηση αναγωγικού αθροίσματος.

Η λειτουργία μείωσης θα γίνει ως εξής: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Εδώ, η f είναι η λειτουργία άθροισης σε δύο στοιχεία της λίστας, που ορίζονται από τη συνάρτηση λάμδα.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

Λειτουργίες Python Lambda για προσαρμογή της ταξινόμησης

Εκτός από τη χρήση συναρτήσεων λάμδα με ενσωματωμένες συναρτήσεις Python, όπως map(), filter() και reduce(), μπορείτε επίσης να τις χρησιμοποιήσετε για να προσαρμόσετε τις ενσωματωμένες συναρτήσεις και τις μεθόδους που χρησιμοποιούνται για ταξινόμηση.

1. Ταξινόμηση λιστών Python

Όταν εργάζεστε με λίστες Python, θα πρέπει συχνά να τις ταξινομείτε με βάση ορισμένα κριτήρια ταξινόμησης. Για να ταξινομήσετε τις λίστες Python στη θέση τους, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη μέθοδο sort() σε αυτές. Εάν χρειάζεστε ένα ταξινομημένο αντίγραφο της λίστας, μπορείτε να χρησιμοποιήσετε τη συνάρτηση sorted().

Η σύνταξη για τη χρήση της συνάρτησης sorted() της Python είναι ταξινομημένη (επαναληπτική, κλειδί=…, αντίστροφη= Σωστό | Λάθος).

– Η βασική παράμετρος χρησιμοποιείται για την προσαρμογή της ταξινόμησης.
– Η αντίστροφη παράμετρος μπορεί να οριστεί σε True ή False. Η προεπιλεγμένη τιμή είναι ψευδής.

Κατά την ταξινόμηση λιστών αριθμών και συμβολοσειρών, η προεπιλεγμένη ταξινόμηση είναι με αύξουσα και αλφαβητική σειρά, αντίστοιχα. Ωστόσο, μερικές φορές μπορεί να θέλετε να ορίσετε κάποιο προσαρμοσμένο κριτήριο ταξινόμησης.

Εξετάστε την ακόλουθη λίστα με φρούτα. Ας υποθέσουμε ότι θέλετε να αποκτήσετε ένα ταξινομημένο αντίγραφο της λίστας. Θα πρέπει να ταξινομήσετε τις συμβολοσειρές σύμφωνα με τον αριθμό των εμφανίσεων του ‘p’ σε αυτές – με φθίνουσα σειρά.

>>> fruits = ['apple','pineapple','grapes','mango']

Ήρθε η ώρα να χρησιμοποιήσετε την προαιρετική παράμετρο κλειδιού. Μια συμβολοσειρά είναι επαναληπτική στην Python και για να λάβετε τον αριθμό των εμφανίσεων ενός χαρακτήρα σε αυτήν, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη μέθοδο .count(). Οπότε ορίσαμε το κλειδί σε λάμδα x:x.count(‘p’) έτσι ώστε η ταξινόμηση να βασίζεται στον αριθμό των φορών που εμφανίζεται το ‘p’ στη συμβολοσειρά.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

Σε αυτό το παράδειγμα:

  • Το κλειδί για ταξινόμηση είναι ο αριθμός των εμφανίσεων του χαρακτήρα ‘p’ και ορίζεται ως έκφραση λάμδα.
  • Καθώς έχουμε ορίσει την αντίστροφη παράμετρο σε True, η ταξινόμηση γίνεται με τη φθίνουσα σειρά του αριθμού των εμφανίσεων του ‘p’.
  12 χαρακτηριστικά ασφαλείας που πρέπει να έχει ο πάροχος φιλοξενίας Ιστού σας

Στη λίστα φρούτων, ο «ανανάς» περιέχει 3 εμφανίσεις του «p» και οι χορδές «μήλο», «σταφύλια» και «μάνγκο» περιέχουν 2, 1 και 0 εμφανίσεις του «p», αντίστοιχα.

Κατανόηση της σταθερής ταξινόμησης

Εξετάστε ένα άλλο παράδειγμα. Για το ίδιο κριτήριο ταξινόμησης, έχουμε επαναπροσδιορίσει τη λίστα φρούτων. Εδώ, το ‘p’ εμφανίζεται στις συμβολοσειρές ‘μήλο’ και ‘σταφύλι’ δύο φορές και μία φορά, αντίστοιχα. Και δεν εμφανίζεται ποτέ στις χορδές «μάνγκο» και «πεπόνι».

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

Στη λίστα εξόδου, το “mango” προηγείται του “melon”, παρόλο που και τα δύο δεν έχουν τον χαρακτήρα “p”. Γιατί όμως συμβαίνει αυτό; Η συνάρτηση sorted() εκτελεί μια σταθερή ταξινόμηση. Έτσι, όταν το πλήθος του ‘p’ είναι ίσο για δύο χορδές, η σειρά των στοιχείων στην αρχική λίστα φρούτων διατηρείται.

Ως γρήγορη άσκηση, αλλάξτε τις θέσεις «μάνγκο» και «πεπόνι» στη λίστα φρούτων, ταξινομήστε τη λίστα με βάση το ίδιο κριτήριο και παρατηρήστε την έξοδο.

▶️ Μάθετε περισσότερα σχετικά με την ταξινόμηση λιστών Python.

2. Ταξινόμηση ενός λεξικού Python

Μπορείτε επίσης να χρησιμοποιήσετε λάμδα κατά την ταξινόμηση λεξικών Python. Σκεφτείτε το παρακάτω λεξικό price_dict που περιέχει στοιχεία και τις τιμές τους.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

Για να λάβετε τα ζεύγη κλειδιών-τιμών ενός λεξικού ως λίστα πλειάδων, μπορείτε να χρησιμοποιήσετε τη μέθοδο του ενσωματωμένου λεξικού .items():

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

Στην Python, όλοι οι επαναληπτικοί: λίστες, πλειάδες, συμβολοσειρές και άλλα, ακολουθούν τη μηδενική ευρετηρίαση. Έτσι, το πρώτο στοιχείο βρίσκεται στο δείκτη 0, το δεύτερο στοιχείο βρίσκεται στον δείκτη 1 και ούτω καθεξής.

Θα θέλαμε να ταξινομήσουμε με βάση την τιμή, η οποία είναι η τιμή κάθε στοιχείου στο λεξικό. Σε κάθε πλειάδα στη λίστα price_dict_items, το στοιχείο στον δείκτη 1 είναι η τιμή. Οπότε ορίσαμε το κλειδί στο λάμδα x:x[1] καθώς θα χρησιμοποιήσει το στοιχείο στο ευρετήριο 1, την τιμή, για να ταξινομήσει το λεξικό.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

Στην έξοδο, τα στοιχεία του λεξικού έχουν ταξινομηθεί με αύξουσα σειρά τιμών: ξεκινώντας από ‘Candy’, με τιμή 3 μονάδες έως ‘Honey’, με τιμή 15 μονάδες.

▶️ Για να μάθετε περισσότερα, ρίξτε μια ματιά σε αυτόν τον λεπτομερή οδηγό για την ταξινόμηση ενός λεξικού Python κατά κλειδί και τιμή.

Ανακεφαλαίωση

Και εκεί το έχετε! Έχετε μάθει πώς να ορίζετε συναρτήσεις λάμδα και να τις χρησιμοποιείτε αποτελεσματικά με άλλες ενσωματωμένες συναρτήσεις Python. Ακολουθεί μια περίληψη των βασικών οδηγιών:

  • Στην Python, τα λάμδα είναι ανώνυμες συναρτήσεις που μπορούν να λάβουν πολλά ορίσματα και να επιστρέψουν μια τιμή. η έκφραση που θα αξιολογηθεί για τη δημιουργία αυτής της τιμής επιστροφής θα πρέπει να είναι μία γραμμή κώδικα. Μπορούν να χρησιμοποιηθούν για να κάνουν πιο συνοπτικούς ορισμούς μικρών συναρτήσεων.
  • Για να ορίσετε τη συνάρτηση Lambda μπορείτε να χρησιμοποιήσετε τη σύνταξη: lambda parameter(s): επιστροφή τιμή.
  • Μερικές από τις σημαντικές περιπτώσεις χρήσης περιλαμβάνουν τη χρήση τους με τις συναρτήσεις map(), filter() και reduce() και ως βασική παράμετρο για την προσαρμογή της ταξινόμησης επαναλήψεων της Python.

Στη συνέχεια, μάθετε πώς να εκτελείτε διαίρεση ορόφων στην Python.