Μια συνάρτηση λάμδα είναι μια συνάρτηση που ορίζεται ανώνυμα και είναι συνήθως μικρή σε μέγεθος. Μια συνάρτηση λάμδα μπορεί να δέχεται οποιοδήποτε αριθμό ορισμάτων, αλλά έχει μόνο μία έκφραση που επιστρέφει την τιμή.
Η σύνταξη μιας συνάρτησης λάμδα στην Python είναι η εξής:
lambda arguments: expression
Όπου:
- “lambda” είναι η λέξη-κλειδί που δηλώνει μια συνάρτηση λάμδα.
- “arguments” αναπαριστά τα ορίσματα που μπορεί να δεχτεί η συνάρτηση. Μπορεί να είναι μηδέν, ένα ή περισσότερα ορίσματα, χωρισμένα με κόμματα.
- “expression” είναι η έκφραση που περιέχει το σώμα της συνάρτησης, και επιστρέφει την τιμή που παράγεται από αυτήν την έκφραση.
Παράδειγμα
# Ορισμός της συνάρτησης λάμδα "add" που παίρνει δύο ορίσματα "a" και "b" και επιστρέφει το άθροισμά τους add = lambda a, b: a + b # Εκτύπωση του αποτελέσματος της κλήσης της συνάρτησης "add" με ορίσματα 5 και 3 print(add(5, 3))
Ο κώδικας αυτός ορίζει μια συνάρτηση λάμδα με όνομα “add” που παίρνει δύο ορίσματα “a” και “b” και επιστρέφει το άθροισμά τους. Στη συνέχεια, εκτυπώνεται το αποτέλεσμα της κλήσης της συνάρτησης “add” με ορίσματα 5 και 3.
Συνολικά, ο κώδικας εκτελεί την πράξη πρόσθεσης των αριθμών 5 και 3 και εκτυπώνει το αποτέλεσμα, που σε αυτήν την περίπτωση είναι 8.
Παράδειγμα
# Ορισμός της συνάρτησης square με χρήση lambda που υπολογίζει το τετράγωνο ενός αριθμού square = lambda x: x * x # Εκτέλεση της συνάρτησης square με την παράμετρο 4 και εκτύπωση του αποτελέσματος print(square(4)) # Εμφανίζει: 16
[adinserter block=”2″]
Ο παραπάνω κώδικας ορίζει μια λειτουργία με όνομα “square” που υπολογίζει το τετράγωνο ενός αριθμού. Αυτό επιτυγχάνεται χρησιμοποιώντας την λειτουργία lambda, η οποία δημιουργεί μια ανώνυμη συνάρτηση. Η λειτουργία square λαμβάνει έναν αριθμό x ως είσοδο και επιστρέφει το τετράγωνο του, δηλαδή x * x.
Στη συνέχεια, ο κώδικας καλεί τη λειτουργία square με την παράμετρο 4 και εκτυπώνει το αποτέλεσμα. Αφού το τετράγωνο του 4 είναι 16, η έξοδος που εμφανίζεται είναι “16”.
Παράδειγμα
max_number = lambda a, b: a if a > b else b print(max_number(10, 20)) # Εμφανίζει: 20 # Ορισμός της συνάρτησης λάμδα max_number με δύο παραμέτρους a και b. # Η συνάρτηση επιστρέφει τη μεγαλύτερη από τις δύο τιμές, a αν η συνθήκη a > b είναι αληθής, αλλιώς b. # Εκτύπωση του αποτελέσματος της κλήσης max_number(10, 20), # όπου η τιμή του μεγαλύτερου αριθμού ανάμεσα στους αριθμούς 10 και 20 θα εμφανιστεί στην οθόνη.
Ο παραπάνω κώδικας ορίζει μια συνάρτηση λάμδα με όνομα max_number
η οποία έχει δύο παραμέτρους a
και b
. Η συνάρτηση αυτή επιστρέφει τη μεγαλύτερη από τις δύο τιμές, δηλαδή εάν η τιμή της παραμέτρου a
είναι μεγαλύτερη από την τιμή της παραμέτρου b
, τότε επιστρέφει την τιμή του a
, αλλιώς επιστρέφει την τιμή του b
.
Στη συνέχεια, γίνεται η κλήση της συνάρτησης λάμδα max_number
με ορίσματα 10 και 20, και το αποτέλεσμα εκτυπώνεται στην οθόνη. Αφού η τιμή του b
είναι μεγαλύτερη από την τιμή του a
, το αποτέλεσμα που θα εκτυπωθεί είναι 20.
Στα παραπάνω παραδείγματα, χρησιμοποιούμε συναρτήσεις λάμδα για να εκτελέσουμε απλές πράξεις. Οι συναρτήσεις λάμδα είναι γρήγορος τρόπος να ορίσετε μια συνάρτηση για απλές εργασίες, χωρίς την ανάγκη να ορίζετε μια πλήρης συνάρτηση χρησιμοποιώντας το def
.
Παράδειγμα:
x = lambda a: a + 13 # Ορισμός μιας συνάρτησης λάμδα που προσθέτει 13 στο όρισμά της print(x(5)) # Εκτέλεση της συνάρτησης λάμδα με όρισμα 5 και εκτύπωση του αποτελέσματος
Ο παραπάνω κώδικας ορίζει μια συνάρτηση λάμδα με όνομα “x” που παίρνει ένα όρισμα “a” και επιστρέφει το αποτέλεσμα της πρόσθεσης του “a” με τον αριθμό 13.
Έπειτα, καλείται η συνάρτηση “x” με όρισμα τον αριθμό 5 και το αποτέλεσμα εκτυπώνεται στην οθόνη. Στην προκειμένη περίπτωση, η συνάρτηση λάμδα εκτελείται με όρισμα 5 και επιστρέφει το αποτέλεσμα 18, το οποίο και εκτυπώνεται.
Παράδειγμα:
# Ορισμός μιας συνάρτησης λάμδα με τις παραμέτρους 'a' και 'b' x = lambda a, b: a * b # Εκτέλεση της συνάρτησης λάμδα με τις τιμές 5 και 6 και εκτύπωση του αποτελέσματος print(x(5, 6))
Ο παραπάνω κώδικας δημιουργεί μια συνάρτηση λάμδα με τη χρήση της λέξης-κλειδιού lambda
. Η συνάρτηση λάμδα πολλαπλασιάζει δύο αριθμούς, τον πρώτο αριθμό a
με τον δεύτερο αριθμό b
. Στη συνέχεια, η συνάρτηση καλείται με τις τιμές 5 και 6 (x(5, 6)
) και εκτυπώνει το αποτέλεσμα, το οποίο είναι 30.
[adinserter block=”3″]
Μπορούμε να χρησιμοποιήσουμε την συνάρτηση λάμδα για να πραγματοποιήσουμε την πράξη αθροίσματος των τριών ορισμάτων:
# Ορισμός της συνάρτησης λάμδα sum με τρία ορίσματα a, b, c sum = lambda a, b, c: a + b + c # Κλήση της συνάρτησης sum με τιμές 10, 20, 30 και αποθήκευση του αποτελέσματος στη μεταβλητή result result = sum(10, 20, 30) # Εκτύπωση του αποτελέσματος print(result)
Ο παραπάνω κώδικας κάνει τα εξής:
- Ορίζει μια συνάρτηση λάμδα με όνομα
sum
, η οποία παίρνει τρία ορίσματαa
,b
καιc
και επιστρέφει το άθροισμά τους. - Καλεί τη συνάρτηση
sum
με τιμές 10, 20 και 30 και αποθηκεύει το αποτέλεσμα στη μεταβλητήresult
. - Εκτυπώνει την τιμή της μεταβλητής
result
, που είναι το άθροισμα των τριών αριθμών (10 + 20 + 30), δηλαδή 60.
Οι λειτουργίες lambda χρησιμοποιούνται συνήθως όταν απαιτείται μια μικρή και ανώνυμη συνάρτηση που θα εκτελεστεί σε ένα σημείο του κώδικα και δεν είναι απαραίτητο να οριστεί μια ξεχωριστή συνάρτηση για αυτό τον σκοπό.
Μια από τις εφαρμογές των συναρτήσεων λάμδα είναι η χρήση τους ως ανώνυμων συναρτήσεων μέσα σε άλλες συναρτήσεις. Για παράδειγμα, αν έχουμε μια συνάρτηση που δέχεται έναν αριθμό και μια ανώνυμη συνάρτηση, και θέλουμε να πολλαπλασιάσουμε τον αριθμό με την αξία που προκύπτει από την ανώνυμη συνάρτηση και να επιστρέψουμε το αποτέλεσμα, μπορούμε να χρησιμοποιήσουμε μια συνάρτηση λαμβδαία ως την ανώνυμη συνάρτηση.
Έχοντας μια λίστα με αριθμούς, μπορούμε να τους ταξινομήσουμε από τον μικρότερο στον μεγαλύτερο χρησιμοποιώντας τη συνάρτηση sorted()
. Για να το επιτύχουμε αυτό, μπορούμε να περάσουμε ένα όρισμα λαμδα ως key
στη συνάρτηση sorted()
. Το όρισμα αυτό θα πρέπει να επιστρέφει τον αριθμό κάθε στοιχείου, ο οποίος θα χρησιμοποιηθεί για την ταξινόμηση της λίστας.
my_list = [5, 1, 3, 2, 4] # Αρχικοποίηση της λίστας my_list με τις τιμές 5, 1, 3, 2, 4 # Ταξινόμηση της λίστας με βάση τις τιμές των στοιχείων sorted_list = sorted(my_list, key=lambda x: x) print(sorted_list) # Εκτύπωση της ταξινομημένης λίστας
Ο παραπάνω κώδικας πραγματοποιεί τα εξής βήματα:
- Αρχικοποιείται η λίστα
my_list
με τις τιμές 5, 1, 3, 2, 4. - Χρησιμοποιώντας τη συνάρτηση
sorted()
, η λίστα ταξινομείται με βάση τις τιμές των στοιχείων. Το αποτέλεσμα αποθηκεύεται στη μεταβλητήsorted_list
. - Εκτυπώνεται η ταξινομημένη λίστα με τη χρήση της εντολής
print()
.
Συνολικά, ο κώδικας εκτελεί την ταξινόμηση της λίστας my_list
και εκτυπώνει το αποτέλεσμα, το οποίο είναι η ταξινομημένη λίστα. Στην περίπτωση αυτή, το αποτέλεσμα που θα εμφανιστεί είναι η λίστα [1, 2, 3, 4, 5]
.
Μπορούμε να ορίσουμε μια συνάρτηση με το όνομα myfunc
, η οποία δέχεται δύο ορίσματα. Ένα από αυτά τα ορίσματα είναι μια συνάρτηση lambda που διπλασιάζει τον αριθμό που της δίνεται, και το άλλο όρισμα είναι ο αριθμός που θέλουμε να διπλασιαστεί. Με αυτόν τον τρόπο, μπορούμε να καλέσουμε τη συνάρτηση myfunc
και πάντα θα εκτελεί την διπλασιασμό του αριθμού που της περνάμε ως όρισμα.
Ένα παράδειγμα κώδικα που χρησιμοποιεί τη συνάρτηση myfunc
με μια λαμβδα συνάρτηση ως όρισμα θα μπορούσε να είναι:
def myfunc(func, number): return func(number) # Κλήση της συνάρτησης func με την παράμετρο number και επιστροφή του αποτελέσματος my_lambda = lambda x: x * 2 # Ορισμός μιας συνάρτησης lambda που διπλασιάζει την παράμετρο x result = myfunc(my_lambda, 5) # Κλήση της συνάρτησης myfunc με την παράμετρο my_lambda και τον αριθμό 5, αποθήκευση του αποτελέσματος στη μεταβλητή result print(result) # Εκτύπωση της τιμής της μεταβλητής result
Στο παραπάνω παράδειγμα, η συνάρτηση myfunc
καλείται με τη λαμβανόμενη συνάρτηση my_lambda
και τον αριθμό 5
ως ορίσματα. Το αποτέλεσμα που επιστρέφεται είναι η διπλασιασμένη τιμή του αριθμού, που είναι 10
, και εκτυπώνεται στη συνέχεια.
[adinserter block=”4″]
Μπορούμε να χρησιμοποιήσουμε τον ίδιο ορισμό συνάρτησης για να δημιουργήσουμε μια συνάρτηση που πολλαπλασιάζει πάντα τον αριθμό που στέλνετε με 3:
def myfunc(n): return lambda a : a * n mytripler = myfunc(3) # Κλήση της συνάρτησης myfunc με παράμετρο τον αριθμό 3 και αποθήκευση της επιστρεφόμενης συνάρτησης στη μεταβλητή mytripler print(mytripler(22)) # Κλήση της συνάρτησης mytripler με παράμετρο τον αριθμό 22 και εκτύπωση του αποτελέσματος
Ο παραπάνω κώδικας περιέχει τα εξής:
- Ορίζεται η συνάρτηση
myfunc(n)
που δέχεται ένα όρισμαn
και επιστρέφει μια λαμβδα συνάρτηση. Η λαμβδα συνάρτηση πολλαπλασιάζει το όρισμαa
με τοn
. - Αναθέτουμε στη μεταβλητή
mytripler
την επιστρεφόμενη λαμβδα συνάρτηση από την κλήση τηςmyfunc(3)
, δηλαδή μια συνάρτηση που πολλαπλασιάζει το όρισμα με τον αριθμό 3. - Εκτυπώνουμε το αποτέλεσμα της κλήσης
mytripler(22)
, που είναι η εκτέλεση της λαμβδα συνάρτησης με όρισμα τον αριθμό 22. Έτσι, το αποτέλεσμα που εκτυπώνεται είναι 66, αφού η λαμβδα συνάρτηση πολλαπλασιάζει το όρισμα με τον αριθμό 3.
Παρακάτω παρουσιάζεται ένα παράδειγμα κώδικα που δημιουργεί δύο συναρτήσεις, οι οποίες χρησιμοποιούν τον ίδιο ορισμό συνάρτησης (συνάρτηση λαμβδα), για να διπλασιάσουν ή να τριπλασιάσουν έναν αριθμό που περνάμε ως είσοδο:
# Ορισμός της συνάρτησης λάμβδα (lambda) με όρισμα x που διπλασιάζει την τιμή του x double = lambda x: x * 2 # Ορισμός της συνάρτησης λάμβδα (lambda) με όρισμα x που τριπλασιάζει την τιμή του x triple = lambda x: x * 3 number = 5 # Αρχικοποίηση της μεταβλητής number με την τιμή 5 # Εκτέλεση των συναρτήσεων double και triple με όρισμα την μεταβλητή number result1 = double(number) # Αποθήκευση του αποτελέσματος της double(number) στη μεταβλητή result1 result2 = triple(number) # Αποθήκευση του αποτελέσματος της triple(number) στη μεταβλητή result2 print(result1) # Εκτύπωση της τιμής της μεταβλητής result1 (αναμένεται 10) print(result2) # Εκτύπωση της τιμής της μεταβλητής result2 (αναμένεται 15)
Στο παράδειγμα παραπάνω, ορίζουμε τη συνάρτηση double
χρησιμοποιώντας τη σύνταξη λαμβδα. Η συνάρτηση αυτή δέχεται έναν αριθμό x
και επιστρέφει το διπλάσιο του. Αντίστοιχα, ορίζουμε τη συνάρτηση triple
, η οποία δέχεται έναν αριθμό x
και επιστρέφει το τριπλάσιο του. Στη συνέχεια, δηλώνουμε έναν αριθμό number
και υπολογίζουμε το αποτέλεσμα της διπλασιασμένης και τριπλασιασμένης τιμής του. Τέλος, εκτυπώνουμε τα αποτελέσματα, που αντιστοιχούν στο διπλάσιο και το τριπλάσιο του αρχικού αριθμού.