- Οι συναρτήσεις (functions) είναι ανεξάρτητα τμήματα κώδικα που λένε στην Python να κάνει κάτι.
- Μέσα σε ένα πρόγραμμα μπορούμε να έχουμε όσες συναρτήσεις θέλουμε.
- Η Python παρέχει τρόπους να χρησιμοποιούμε ξανά κώδικα που έχουμε ήδη γράψει.
- Σημαντικό πλεονέκτημα από την επαναχρησιμοποίηση του κώδικα είναι ότι το πρόγραμμα γίνεται μικρότερο και ευκολότερο στην κατανόηση.
- Στην Python, η επαναχρησιμοποίηση του κώδικα γίνεται με δύο τρόπους:
- Συναρτήσεις (Functions)
- Βιβλιοθήκες (Modules)
Έχουμε ήδη δει διάφορες ενσωματωμένες συναρτήσεις στην πράξη, όπως η len() και η range().
ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ
- Για να χρησιμοποιήσουμε μια συνάρτηση, πρώτα πρέπει να την ορίσουμε.
- Με τον ορισμό συνάρτησης προσδιορίζουμε ποιο είναι το τμήμα εντολών της, το οποίο εκτελείται κάθε φορά που την καλούμε.
- Κάθε ορισμός ξεκινάει με τη λέξη def (δηλαδή define) και έχει 3 βασικά μέρη:
- όνομα της συνάρτησης
- παραμέτρους εντός ζεύγους παρενθέσεων
- κυρίως τμήμα εντολών
ΔΟΜΗ ΣΥΝΑΡΤΗΣΗΣ
- Για τον ορισμό μιας συνάρτησης, γράφουμε τη λέξη def, το όνομα της, ένα ζεύγος παρενθέσεων, μια άνω-κάτω τελεία και το τμήμα εντολών της εντός της κατάλληλης εσοχής.
>>> def όνομα(παράμετροι):
>>> εντολή1
>>> εντολή2
>>> εντολή3
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΗΣ
- Όταν ο υπολογιστής δει τον ορισμό της συνάρτησης, καταλαβαίνει ότι αυτή υπάρχει, και ότι θα χρησιμοποιηθεί αργότερα.
- Ωστόσο, εκτελεί τη συνάρτηση μόνο στα σημεία που αυτή καλείται (κλήση συνάρτησης).
Η κλήση μιας συνάρτησης του χρήστη γίνεται όπως και στις ενσωματωμένες συναρτήσεις. Χρησιμοποιούμε το όνομα της συνάρτησης ακολουθούμενο από ένα ζεύγος παρενθέσεων.
ΧΡΗΣΗ ΠΑΡΑΜΕΤΡΩΝ
- Οι συναρτήσεις επικοινωνούν με το υπόλοιπο πρόγραμμα αφού δέχονται και επιστρέφουν τιμές.
- Μια συνάρτηση μπορεί να δέχεται τιμές μέσα από τις παραμέτρους της, οι οποίες είναι απλά ονόματα μεταβλητών που βρίσκονται μέσα στις παρενθέσεις της επικεφαλίδας της.
H συνάρτηση message() χρησιμοποιεί την παράμετρο name. Όταν κληθεί η message(), η παράμετρος name δέχεται την τιμή που περνάει μέσα από το όρισμα "Maria".
- Μια συνάρτηση μπορεί να έχει καμία, μία ή περισσότερες παραμέτρους εντός παρενθέσεων.
- Κατά τον ορισμό της συνάρτησης, μέσα στις παρενθέσεις γράφουμε τα ονόματα των παραμέτρων.
- Κατά τη κλήση της συνάρτησης, μέσα στις παρενθέσεις γράφουμε τις τιμές των παραμέτρων (ή ορίσματα).
ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ
- Κάθε συνάρτηση για να επιστρέψει μια τιμή στο σημείο που την κάλεσε, χρησιμοποιεί την εντολή return στο τέλος των εντολών της.
Στο παρακάτω παράδειγμα χρησιμοποιούμε τη συνάρτηση summary που δέχεται 2 αριθμητικές τιμές ως παραμέτρους και επιστρέφει το άθροισμα των τιμών αυτών.
ΕΠΙΣΤΡΟΦΗ ΠΟΛΛΩΝ ΤΙΜΩΝ
- Μια συνάρτηση μπορεί να επιστρέψει και πολλές τιμές. Για να το πετύχει, μετά την εντολή return, τοποθετούνται οι τιμές που χωρίζονται με κόμματα.
ΕΝΘΥΛΑΚΩΣΗ & ΕΜΒΕΛΕΙΑ
- Κάθε μεταβλητή που ανήκει στο εσωτερικό μιας συνάρτησης δεν μπορεί να χρησιμοποιηθεί και έξω από αυτή.
- Κάθε μεταβλητή ισχύει μόνο μέσα στην συνάρτηση που έχει δημιουργηθεί (εμβέλεια, scope).
- Στον προγραμματισμό, αυτό ονομάζεται ενθυλάκωση (encapsulation).
ΠΑΡΑΜΕΤΡΟΙ ΘΕΣΗΣ
- Η σειρά των ορισμάτων κατά την κλήση μιας συνάρτησης, καθορίζει ποια τιμή περνάει σε κάθε παράμετρο.
- Οι παράμετροι αυτές δέχονται τις τιμές τους βάσει της σειράς των ορισμάτων της κλήσης.
- Η πρώτη παράμετρος δέχεται την τιμή του πρώτου ορίσματος, η δεύτερη δέχεται την τιμή του δεύτερου κοκ.
ΛΕΚΤΙΚΕΣ ΠΑΡΑΜΕΤΡΟΙ
- Οι λεκτικές παράμετροι είναι σαν τις κοινές παραμέτρους με τη διαφορά ότι δεν βασίζονται στη σειρά εμφάνισης των ορισμάτων τους κατά την κλήση.
- Μέσω λεκτικών ορισμάτων, χρησιμοποιούμε τα κυριολεκτικά ονόματα των παραμέτρων κατά τη κλήση, ώστε να συνδέσουμε τα ορίσματα με τις παραμέτρους.
Στο παρακάτω παράδειγμα η συνάρτηση birthday1 χρησιμοποιεί τις παραμέτρους name και age.
Στις δύο πρώτες κλήσεις, τις χρησιμοποιούμε σαν παραμέτρους θέσης, αφού η πρώτη παράμετρος δέχεται την πρώτη τιμή των ορισμάτων και η δεύτερη παράμετρος δέχεται την δεύτερη τιμή.
Στις δύο επόμενες κλήσεις, τις χρησιμοποιούμε σαν λεκτικές παραμέτρους, γιατί χρησιμοποιούμε λεκτικά ορίσματα για τη σύνδεση μιας τιμή με μια παράμετρο.
ΧΡΗΣΗ ΠΡΟΚΑΘΟΡΙΣΜΕΝΩΝ ΤΙΜΩΝ
- Μπορούμε επίσης να εκχωρήσουμε προκαθορισμένες τιμές στις παραμέτρους μιας συνάρτησης για την περίπτωση που δεν περαστούν αντίστοιχες μέσω της κλήσης της.
- Όμως, αν εκχωρήσουμε μια προκαθορισμένη τιμή σε μία παράμετρο της συνάρτησης, αυτό πρέπει να το κάνουμε και για τις υπόλοιπες παραμέτρους.
Ο επόμενος κώδικας είναι εσφαλμένος γιατί δεν εκχωρούμε προκαθορισμένες τιμές σε όλες τις παραμέτρους της συνάρτησης.
Ο ορισμός της συνάρτησης birthday2() χρησιμοποιεί δύο προκαθορισμένες τιμές ("John" και 1) για τις παραμέτρους name και age, για την περίπτωση που δεν περάσουν τιμές σε αυτές.
ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΗΣ
- Η εμβέλεια μιας μεταβλητής είναι το τμήμα του προγράμματος που η μεταβλητή αυτή είναι ενεργή.
- Κάθε συνάρτηση έχει τη δική της εμβέλεια και δεν μπορεί να προσπελάσει τις μεταβλητές μιας άλλης συνάρτησης.
Στην παρακάτω εικόνα βλέπουμε 3 διαφορετικές εμβέλειες. Η μεταβλητή variable1 έχει εμβέλεια στη συνάρτηση func1(), η variable2 έχει εμβέλεια στη συνάρτηση func2(), και η variable3 έχει καθολική εμβέλεια, που σημαίνει ότι είναι γνωστή και ενεργή σε όλο το κυρίως πρόγραμμα.
ΚΑΘΟΛΙΚΗ & ΤΟΠΙΚΗ ΕΜΒΕΛΕΙΑ
- Κάθε μεταβλητή που δημιουργείται μέσα στο κυρίως πρόγραμμα, ονομάζεται καθολική μεταβλητή.
- Κάθε μεταβλητή που δημιουργείται μέσα σε κάποια συνάρτηση ονομάζεται, τοπική μεταβλητή.
Αφού η variable1 έχει οριστεί μέσα στη func1(), είναι τοπική μεταβλητή που ισχύει στην εμβέλεια της func1() και άρα δεν μπορεί να χρησιμοποιηθεί εκτός αυτής. Αν δύο μεταβλητές έχουν το ίδιο όνομα μέσα σε δύο διαφορετικές συναρτήσεις, θεωρούνται διαφορετικές μεταξύ τους.
Στην παρακάτω εικόνα η μεταβλητή value είναι καθολική μεταβλητή που ζει στο κυρίως πρόγραμμα. Μια καθολική μεταβλητή μπορεί να χρησιμοποιηθεί και εντός και εκτός μιας συνάρτησης.
Αν μέσα σε μία συνάρτηση, δώσουμε σε μια τοπική μεταβλητή το ίδιο όνομα που έχει μία καθολική μεταβλητή, στην ουσία σκιάζουμε
(επικαλύπτουμε προσωρινά) την καθολική μεταβλητή.
ΕΝΤΟΛΗ global
- Δεν είναι καλή τεχνική να σκιάζουμε τις καθολικές μεταβλητές εντός μιας συνάρτησης διότι μπορούμε να προκαλέσουμε σύγχυση.
- Για τον ολοκληρωτικό έλεγχο μιας καθολικής μεταβλητής εντός μιας συνάρτησης, γράφουμε τη λέξη global πριν από το όνομα της μεταβλητής κατά τη χρήση της.
- Με τον τρόπο αυτό, η συνάρτηση μπορεί να μεταβάλλει την τιμή μιας καθολικής μεταβλητής χωρίς πρόβλημα.
Στο παρακάτω παράδειγμα μετατρέπουμε τη τιμή της καθολικής μεταβλητής value εντός των εντολών της συνάρτησης, γράφοντας τη λέξη global πριν από το όνομα value.
ΣΥΝΑΡΤΗΣΗ MAIN()
- Το κυρίως μέρος ενός προγράμματος μπορεί να τοποθετείται μέσα στη δική του συνάρτηση.
- Κατά την τοποθέτηση των εντολών του κυρίως προγράμματος μέσα σε μία συνάρτηση, συνηθίζεται το όνομα αυτής να είναι main().
Μακρής Ηλίας Π.Ε. Πληροφορικής