Μια συνάρτηση είναι ένα τμήμα κώδικα που εκτελείται μόνο όταν καλείται. Μπορείτε να περάσετε δεδομένα, γνωστά ως παράμετροι, μέσα σε μια συνάρτηση. Μια συνάρτηση μπορεί να επιστρέψει δεδομένα ως αποτέλεσμα.
Παράδειγμα 1: Μια απλή συνάρτηση που εκτυπώνει “Γεια σου, κόσμε!”
def greet(): print("Γεια σου, κόσμε!") greet()
Παράδειγμα 2: Συνάρτηση με παραμέτρους
def say_hello(name): print("Γεια σου, " + name) say_hello("Γιάννης")
Παράδειγμα 3: Συνάρτηση που επιστρέφει αποτέλεσμα
def add_numbers(a, b): return a + b result = add_numbers(5, 3) print(result)
Στο πρώτο παράδειγμα, η συνάρτηση greet
εκτυπώνει “Γεια σου, κόσμε!” όταν καλείται. Στο δεύτερο παράδειγμα, η συνάρτηση say_hello
δέχεται μια παράμετρο name
και εκτυπώνει ένα χαιρετισμό που περιλαμβάνει το όνομα. Στο τρίτο παράδειγμα, η συνάρτηση add_numbers
δέχεται δύο παραμέτρους, a
και b
, και επιστρέφει το άθροισμα των δύο αριθμών.
Στην Python μία συνάρτηση ορίζεται χρησιμοποιώντας τη λέξη-κλειδί def. Παράδειγμα:
def greet(name): print("Hello, " + name) greet("John")
Στο παραπάνω παράδειγμα, ορίζουμε μια συνάρτηση greet
με ένα παράμετρο name
, η οποία εκτυπώνει το μήνυμα “Hello, ” και το name
που δόθηκε ως όρισμα στη συνάρτηση. Στη συνέχεια, καλούμε τη συνάρτηση greet
δίνοντας την τιμή “John” στο παράμετρο name
.
[adinserter block=”2″]
Ορίζουμε μια συνάρτηση με το όνομα “greet” που θα χαιρετά το όνομα που θα δοθεί ως παράμετρος και θα επιστρέφει ένα μήνυμα καλωσορίσματος:
def greet(name): print("Hello, " + name + "! Welcome to Python programming.") greet("John")
Αυτό θα εκτυπώσει το ακόλουθο μήνυμα:
Hello, John! Welcome to Python programming.
Οι πληροφορίες μπορούν να περαστούν στις συναρτήσεις ως ορίσματα.
Τα ορίσματα καθορίζονται μετά το όνομα της συνάρτησης, μέσα στις παρενθέσεις. Μπορείτε να προσθέσετε όσα ορίσματα θέλετε, απλώς χωρίζοντάς τα με κόμμα.
Το παρακάτω παράδειγμα έχει μια συνάρτηση με ένα όρισμα (fname). Όταν καλείται η συνάρτηση, περνάμε ένα όνομα, το οποίο χρησιμοποιείται μέσα στη συνάρτηση για να εκτυπωθεί το πλήρες όνομα:
def my_function(fname): print(fname + " Refsnes") my_function("Emil") my_function("Tobias") my_function("Linus")
Αυτό θα έχει ως έξοδο:
Emil Refsnes Tobias Refsnes Linus Refsnes
Οι όροι παράμετρος και προσαρτημένη μεταβλητή (ή απλά όρισμα) μπορούν να χρησιμοποιηθούν για να περιγράψουν το ίδιο πράγμα: πληροφορίες που περνάνε σε μια συνάρτηση. Ο όρος “παράμετρος” αναφέρεται στο όρισμα κατά τον ορισμό της συνάρτησης, ενώ ο όρος “προσαρτημένη μεταβλητή” ή απλά “όρισμα” αναφέρεται στο όρισμα κατά την κλήση της συνάρτησης.
Η προεπιλεγμένη συμπεριφορά μιας συνάρτησης στην Python είναι να απαιτεί τον σωστό αριθμό ορισμάτων κατά την κλήση της συνάρτησης. Αυτό σημαίνει ότι αν μια συνάρτηση αναμένει δύο ορίσματα, θα πρέπει να κληθεί με δύο ορίσματα, όχι περισσότερα και όχι λιγότερα.
Στο παρακάτω παράδειγμα έχουμε μια συνάρτηση που παίρνει δύο ορίσματα και επιστρέφει το αθροισμά τους:
def add_numbers(x, y): result = x + y return result
Αν προσπαθήσουμε να καλέσουμε αυτήν τη συνάρτηση με διαφορετικό αριθμό ορισμάτων, θα λάβουμε ένα σφάλμα:
add_numbers(2, 3) # Εκτέλεση επιτυχής add_numbers(2) # Σφάλμα: αναμένει 2 ορίσματα add_numbers(2, 3, 4) # Σφάλμα: αναμένει 2 ορίσματα
Στο πρώτο παράδειγμα καλούμε τη συνάρτηση με δύο ορίσματα και επιστρέφεται ο σωστός αριθμός.
Στο δεύτερο παράδειγμα, καλούμε τη συνάρτηση με ένα μόνο όρισμα, αντί για τα δύο που αναμένει η συνάρτηση. Έτσι θα λάβουμε ένα σφάλμα που μας ενημερώνει ότι η συνάρτηση περιμένει ως είσοδο άλλο αριθμό ορισμά
Στα Python, μπορούμε να ορίσουμε μια συνάρτηση που να δέχεται μια μεταβλητή αριθμού ορίων ορισμένη ως *args
, η οποία επιτρέπει την πέραση μιας αυθαίρετου αριθμού ορισμάτων.
Η συνάρτηση μπορεί να επεξεργαστεί αυτά τα ορίσματα χρησιμοποιώντας έναν βρόχο ή άλλες μεθόδους. Το *args
μπορεί να ονομαστεί οποιοδήποτε άλλο όνομα που θέλετε, αλλά συνήθως χρησιμοποιείται αυτή η σύμβαση για να καθορίσετε τη χρήση της.
[adinserter block=”3″]
Παρακάτω είναι ένα παράδειγμα μιας συνάρτησης με το *args
:
def my_function(*args): for arg in args: print(arg) my_function("apple", "banana", "cherry")
Αυτός ο κώδικας θα εκτυπώσει:
apple banana cherry
Μπορείτε επίσης να στείλετε ορίσματα με τη σύνταξη key = value.
Με αυτόν τον τρόπο, η σειρά των ορισμάτων δεν έχει σημασία.
Παράδειγμα:
def my_function(child3, child2, child1): print("The youngest child is " + child3) my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
Αναμένομαι η έξοδος να είναι:
The youngest child is Linus
Μπορείτε να στείλετε κλειδικά ορίσματα σε μια συνάρτηση χρησιμοποιώντας δύο αστερίσκους: ** πριν το όνομα της παραμέτρου στον ορισμό της συνάρτησης. Με αυτόν τον τρόπο η συνάρτηση θα λαμβάνει ένα λεξικό ορισμάτων και θα μπορεί να έχει πρόσβαση στα στοιχεία ανάλογα:
Παράδειγμα:
Παράδειγμα:
def my_function(**kwargs): for key, value in kwargs.items(): print(key, value) my_function(first='John', last='Doe', age=35)
Αναμένομαι να εκτυπώσει:
first John last Doe age 35
Μπορούμε να ορίσουμε μια προκαθορισμένη τιμή για ένα παράμετρο στον ορισμό της συνάρτησης. Αυτό σημαίνει ότι αν δεν δοθεί τιμή για αυτόν τον παράμετρο όταν καλούμε τη συνάρτηση, η συνάρτηση θα χρησιμοποιήσει την προκαθορισμένη τιμή.
Το παρακάτω παράδειγμα δείχνει πώς να χρησιμοποιήσετε μια προκαθορισμένη τιμή παραμέτρου σε μια συνάρτηση:
def my_function(country = "Norway"): print("I am from " + country) my_function("Sweden") my_function("India") my_function() my_function("Brazil")
Αυτό θα παράγει την ακόλουθη έξοδο:
I am from Sweden I am from India I am from Norway I am from Brazil
Μπορείτε να στείλετε οποιοδήποτε τύπο δεδομένων ως παράμετρο σε μια συνάρτηση (συμβολοσειρά, αριθμό, λίστα, λεξικό κ.λπ.), και θα χειριστείται ως ο ίδιος τύπος δεδομένων μέσα στη συνάρτηση.
[adinserter block=”4″]
Π.χ. αν στείλετε μια λίστα ως όρισμα, θα παραμείνει λίστα όταν φτάσει στη συνάρτηση:
def my_function(food): for x in food: print(x) fruits = ["apple", "banana", "cherry"] my_function(fruits)
Αυτό θα εκτυπώσει:
apple banana cherry
Ορίζοντας τη λέξη κλειδί return
μέσα στη συνάρτηση, μπορούμε να επιστρέψουμε μια τιμή ως αποτέλεσμα της συνάρτησης.
Ένα απλό παράδειγμα είναι η συνάρτηση square()
που υπολογίζει το τετράγωνο ενός αριθμού και επιστρέφει το αποτέλεσμα:
def square(x): return x * x result = square(5) print(result) # Output: 25
Στο παραπάνω παράδειγμα, καλούμε τη συνάρτηση square()
με την τιμή 5
και η συνάρτηση επιστρέφει το αποτέλεσμα 25
, το οποίο αποθηκεύουμε στη μεταβλητή result
. Στη συνέχεια, εκτυπώνουμε την τιμή της result
, η οποία είναι το αποτέλεσμα του τετραγώνου του αριθμού 5
.
Οι ορισμοί συναρτήσεων πρέπει να περιλαμβάνουν τουλάχιστον μία εντολή. Αν δεν θέλουμε να βάλουμε κάποια εντολή στον ορισμό μιας συνάρτησης, μπορούμε να χρησιμοποιήσουμε τη λέξη-κλειδί pass
για να τονίσουμε ότι δεν υπάρχει περαιτέρω λειτουργικότητα προς το παρόν.
Παράδειγμα:
def my_function(): pass
Αναδρομή
Η Python επίσης δέχεται αναδρομικές συναρτήσεις, που σημαίνει ότι μια ορισμένη συνάρτηση μπορεί να καλέσει τον εαυτό της.
Η αναδρομή είναι μια κοινή μαθηματική και προγραμματιστική έννοια. Σημαίνει ότι μια συνάρτηση καλεί τον εαυτό της. Αυτό έχει το πλεονέκτημα ότι μπορείτε να διατρέξετε δεδομένα για να φτάσετε σε ένα αποτέλεσμα.
Ο προγραμματιστής πρέπει να είναι πολύ προσεκτικός με την αναδρομή, καθώς μπορεί εύκολα να οδηγήσει σε μια συνάρτηση που δεν τερματίζει ποτέ ή χρησιμοποιεί υπερβολική ποσότητα μνήμης ή επεξεργαστικής ισχύος. Ωστόσο, όταν γραφτεί σωστά, η αναδρομή μπορεί να είναι μια πολύ αποτελεσματική και μαθηματικά κομψή προσέγγιση στον προγραμματισμό.
Σε αυτό το παράδειγμα, η tri_recursion() είναι μια συνάρτηση που έχουμε ορίσει για να καλέσει τον εαυτό της (“αναδρομή”). Χρησιμοποιούμε τη μεταβλητή k ως τα δεδομένα, που μειώνονται κατά 1 (-1) κάθε φορά που κάνουμε αναδρομή. Η αναδρομή τερματίζεται όταν η συνθήκη δεν είναι μεγαλύτερη από 0 (δηλαδή όταν είναι 0).
Για έναν νέο προγραμματιστή, μπορεί να χρειαστεί κάποιος χρόνος για να καταλάβει ακριβώς πώς λειτουργεί αυτό, ο καλύτερος τρόπος για να το μάθει είναι μέσω δοκιμών και τροποποιήσεων.
Παράδειγμα αναδρομικής συνάρτησης:
def tri_recursion(k): if k > 0: result = k + tri_recursion(k - 1) print(result) else: result = 0 return result print("Το αποτέλεσμα της αναδρομής είναι:") tri_recursion(6)
Στο παραπάνω παράδειγμα, η αναδρομική συνάρτηση tri_recursion
καλεί τον εαυτό της με μια μειωμένη τιμή της παραμέτρου k
κάθε φορά, μέχρι το k
να γίνει 0. Το αποτέλεσμα είναι το άθροισμα των τιμών του k
από την αρχική τιμή έως το 1.