Python Functions Tutorial
-
Upload
ernst-stavro -
Category
Documents
-
view
250 -
download
0
description
Transcript of Python Functions Tutorial
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Περιεχόμενα
• Συνάρτθςθ: Τι είναι και πϊσ δθλϊνεται
• Μορφζσ ςφνταξθσ ςυναρτιςεων
• Ρϊσ εκτελεί θ Python μια ςυνάρτθςθ
• Εμβζλεια μεταβλθτϊν
• Ορίςματα
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Τι είναι μια ςυνάρτηςη (function)
• Η ςυνάρτθςθ ομαδοποιεί ζνα ςφνολο εντολών ϊςτε να είναι διακζςιμεσ –κάτω από ζνα κοινό όνομα αναφοράσ- να κλθκοφν οποτεδιποτε και οπουδιποτε μζςα ςτο πρόγραμμα χρειαςτεί
• Μια διαδικαςία «πακζτο» που εκκινεί με τθν αναφορά ενόσ ονόματοσ
• Οι ςυναρτιςεισ όταν καλοφνται:
• (α) επιτρζπουν τον κακοριςμό τιμϊν παραμζτρων που περνοφν ωσ «ορίςματα» από το πρόγραμμα που καλεί προσ τθ ςυνάρτθςθ,
• (β) υπολογίηουν μία ι περιςςότερεσ τιμζσ που επιςτρζφουν ςτο πρόγραμμα που τισ καλεί
• Ρλεονεκτιματα χριςθσ Συναρτιςεων:
• Επαναχρθςιμοποίθςθ κϊδικα: ελαχιςτοποίθςθ πλεοναςμοφ ςτον κϊδικα
• Σμθματοποίθςθ: διαχωριςμόσ κϊδικα ςε ςαφι τμιματα με καλά προςδιοριςμζνεσ λειτουργίεσ
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Δήλωςη ςυνάρτηςησ
• def: δεςμευμζνθ λζξθ για τθ διλωςθ ςυνάρτθςθσ (από το define – ορίηω)
• name: το όνομα τθσ ςυνάρτθςθσ, ζνασ αναγνωριςτισ (identifier)
• (arg1, arg2, … argN): θ λίςτα παραμζτρων (parameters) (ι οριςμάτων (arguments)) τθσ ςυνάρτθςθσ (προαιρετικό)
• statements: το block εντολϊν που εκτελεί θ ςυνάρτθςθ όταν καλείται
• return: δεςμευμζνθ λζξθ, δθλϊνει το τζλοσ τθσ ςυνάρτθςθσ και τθν επιςτροφι τθσ τιμισ value (προαιρετικό)
• value: τιμι (μεταβλθτι ι ζκφραςθ) που υπολογίςτθκε και επιςτρζφεται ςτον κϊδικα κλιςθσ (προαιρετικό)
ΜΗΝ ΞΕΧΝΑΤΕ
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Παραδείγματα - 1
• Μπορείτε να δθλϊςετε μια απλι ςυνάρτθςθ και ςτο κζλυφοσ • Μετά τθ return x*y πατιςτε 2
φορζσ Enter
• Γράψτε το ίδιο παράδειγμα ςτον ςυντάκτθ και τρζξτε το πρόγραμμα
• Ιςοδφναμα μπορείτε να γράψετε και: print(ginomeno(2,4))
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Παραδείγματα - 2 • Παράμετροι (parameter): Τα
ονόματα των μεταβλθτϊν που γράφουμε ςτθν παρζνκεςθ ςτον οριςμό τθσ ςυνάρτθςθσ
• Ορίςματα (arguments): Οι τιμζσ που περνάμε ςτθ ςυνάρτθςθ κατά τθν κλιςθ τθσ (γράφονται επίςθσ μζςα ςτθν παρζνκεςθ)
• Κατά τθν κλιςθ μιασ ςυνάρτθςθσ τα ορίςματα (τιμζσ) που περνάτε μζςα ςτθν παρζνκεςθ αντιςτοιχοφν ζνα προσ ζνα ςτισ παραμζτρουσ που δθλϊςατε ςτον οριςμό τθσ ςυνάρτθςθσ (εκτόσ κι αν ορίςουμε διαφορετικά)
• Στο παραπάνω παράδειγμα:
• 2 x
• 4 y
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Παραδείγματα - 3
• Πταν καλείται θ ςυνάρτθςθ οι τιμζσ των a, b ςτο κφριο πρόγραμμα «περνοφν» ςτισ παραμζτρουσ x & y
• Δθλ. οι x, y αναφζρονται («δείχνουν») ςτισ τιμζσ 3 & 5
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Παραδείγματα - 4
• Μετά τθν εκτζλεςθ τθσ ςυνάρτθςθσ:
• (α) απελευκερϊνεται θ μνιμθ που είχε δεςμευτεί για τθν εκτζλεςθ τθσ ςυνάρτθςθσ
• (β) θ ςυνάρτθςθ ζχει επιςτρζψει τθν τιμι που υπολόγιςε (μεταβλθτι c)
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Παραδείγματα - 5
• Τι κα τυπϊςει θ print; Γιατί;
• Τι ςυμπεράςματα βγάηετε για τον τρόπο λειτουργίασ των ςυναρτιςεων;
• Πολυμορφιςμόσ: το νόθμα μιασ λειτουργίασ (πράξθσ, τελεςτι, κλπ.) εξαρτάται από τον τφπο των αντικειμζνων ςτα οποία εφαρμόηεται
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Μορφέσ ςυναρτήςεων - 1
1. ΧΩΡΙ ΠΑΡΑΜΕΣΡΟΤ / ΧΩΡΙ RETURN
• Η ςυνάρτθςθ μπορεί να μθν ζχει παραμζτρουσ
• Επίςθσ μπορεί να μθν υπάρχει θ τελευταία διλωςθ return
• Πταν καλείται εκτελείται απλά θ print()
• Ραρόλο που δεν υπάρχει return κεωρείται (ςιωπθρά) πωσ υπάρχει και επιςτρζφει τθν τιμι None
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Μορφέσ ςυναρτήςεων - 2
2. ΧΩΡΙ ΠΑΡΑΜΕΣΡΟΤ / ΜΕ RETURN
• Η ςυνάρτθςθ μπορεί να μθν ζχει παραμζτρουσ αλλά επιςτρζφει μία τιμι (ι περιςςότερεσ) μζςω τθσ return
• Ραραδείγματα κλιςθσ:
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Μορφέσ ςυναρτήςεων - 3
3. ΜΕ ΠΑΡΑΜΕΣΡΟΤ / ΧΩΡΙ RETURN
• Η ςυνάρτθςθ ζχει παραμζτρουσ ειςόδου αλλά δεν ζχει return
• Η ςυνάρτθςθ ολοκλθρϊνει μια ενζργεια χωρίσ να επιςτρζφει κάτι ςτον κϊδικα που τθν καλεί
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Μορφέσ ςυναρτήςεων - 4
4. ΜΕ ΠΑΡΑΜΕΣΡΟΤ / ΜΕ RETURN
• Η ςυνάρτθςθ ζχει παραμζτρουσ ειςόδου και επιςτρζφει τιμζσ μζςω τθσ return
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
def Μορφέσ ςυναρτήςεων - 5
5. ΜΕ ΠΑΡΑΜΕΣΡΟΤ ΠΡΟΚΑΘΟΡΙΜΕΝΗ ΣΙΜΗ
• Η ςυνάρτθςθ ζχει παραμζτρουσ ειςόδου ςτισ οποίεσ δίνονται προκακοριςμζνεσ τιμζσ
• Κατά τθν κλιςθ μπορεί να μθν δοκεί όριςμα ςτθν παράμετρο προκακοριςμζνθσ τιμισ
• Αν όμωσ δοκεί τότε υπεριςχφει (override) τθσ προκακοριςμζνθσ τιμισ
• Τί κα εμφανίςουν οι print ςε κάκε περίπτωςθ;
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Πώσ εκτελεί η Python μια ςυνάρτηςη; - 1
• Η διλωςθ def είναι μια πραγματικι εκτελζςιμθ εντολι – όταν εκτελείται δθμιουργεί ζνα νζο αντικείμενο τθσ ςυνάρτθςθσ και το ςυνδζει με ζνα όνομα (όπωσ ιςχφει και για τα ονόματα μεταβλθτϊν)
• Άρα ςε μεγάλο βακμό θ διλωςθ def μοιάηει με τθν εντολι ανάκεςθσ (assignment, =) απλά ανακζτει/ςυνδζει ζνα όνομα με το αντικείμενο ςυνάρτθςθσ κατά τθν εκτζλεςθ
• Ο παραπάνω τρόποσ εκτζλεςθσ ζχει 2 ςθμαντικζσ ςυνζπειεσ:
Function object
func() fname
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Πώσ εκτελεί η Python μια ςυνάρτηςη; - 2 • (1) Η διλωςθ τθσ ςυνάρτθςθσ μπορεί να εμφανίηεται οπουδιποτε
μπορεί να εμφανιςτεί και μια διλωςθ, (δθλ. όχι μόνον ςτθν αρχι του προγράμματοσ)
ΠΑΡΑΔΕΙΓΜΑ
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Πώσ εκτελεί η Python μια ςυνάρτηςη; - 3 • (2) Η ςυνάρτθςθ μπορεί να αλλάηει όνομα κατά τθν εκτζλεςθ
ι να ςυνδζεται και με άλλα ονόματα
ΠΑΡΑΔΕΙΓΜΑ
Μετά τθν εκτζλεςθ τθσ εντολισ ανάκεςθσ
power = dynamh
θ ςυνάρτθςθ μπορεί να κλθκεί και με το όνομα ‘power’
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια μεταβλητών (Variable scope) - 1
• Σοπικι μεταβλθτι (local) • Κάκε μεταβλθτι (όνομα) που παίρνει
τιμι μζςα ςε μια ςυνάρτθςθ είναι τοπικι (local) ςτθ ςυνάρτθςθ αυτι
• Ζχει τοπικι εμβζλεια (local scope)
• Ανικει ςτον τοπικό χϊρο ονομάτων (local namespace) τθσ ςυνάρτθςθσ
• Κακολικι μεταβλθτι (Global) • Μια μεταβλθτι που παίρνει τιμι ςε
επίπεδο κφριου προγράμματοσ (δθλ. ζξω από όλεσ τισ ςυναρτιςεισ) είναι κακολικι (global) ςτο πρόγραμμα
• Ζχει κακολικι εμβζλεια
• Ανικει ςτον κακολικό χϊρο ονομάτων (global namespace) του κφριου προγράμματοσ
• Σοπικζσ: res, x
• Κακολικζσ: s1, s2
• Παράμετροι: ;;
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια μεταβλητών - 2
• Μθ-τοπικι μεταβλθτι (nonlocal variable) • Μια μεταβλθτι που παίρνει
τιμι ςε μια περιβάλλουςα ςυνάρτθςθ είναι μθ-τοπικι (nonlocal) για τισ φωλιαςμζνεσ ςυναρτιςεισ .
• Μθ-τοπικζσ: first, last • Χωρίσ τθ nonlocal οι first & last
είναι τοπικζσ ςτθ nested γιατί παίρνουν τιμι εκεί
• Πταν ενεργοποιθκεί θ διλωςθ nonlocal είναι μθ-τοπικζσ και ταυτίηονται με τισ first, last τθσ περικλείουςασ ςυνάρτθςθσ intersect
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια μεταβλητών : Πόςα επίπεδα;
• Ο κανόνασ LEGB
• LEGB = Local / Enclosing / Global / Built-in
• H Python διαχειρίηεται τα ονόματα ςε 4 επίπεδα εμβζλειασ:
• Local (Τοπικι) • Κάκε απλι ςυνάρτθςθ
• Enclosing (Ρερικλείουςα) • Κάκε ςυνάρτθςθ που περικλείει φωλιαςμζνεσ ςυναρτιςεισ
• Global (Κακολικι) • Κφριο πρόγραμμα
• Built-in (Ενςωματωμζνθ) • Τα standard ονόματα τθσ γλϊςςασ / Άλλα πακζτα / Βιβλιοκικεσ, κλπ.
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια μεταβλητών Γενικόσ κανόνασ LEGB
• Γενικόσ κανόνασ: κάκε μεταβλθτι είναι local ςτο επίπεδο τθσ ςυνάρτθςθσ όπου γίνεται ανάκεςθ τιμισ, εκτόσ εάν εμφανίηεται ςε δθλϊςεισ global ι nonlocal
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια Παραδείγματα - 1
• Μια global μεταβλθτι μπορεί να χρθςιμοποιθκεί μζςα ςε ςυνάρτθςθ (όχι όμωσ να γίνει ανάκεςθ)
• Χ: Global
• Z, Y: Locals
• Global
• Local
• Τυπϊνει 88 (global)
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια Παραδείγματα - 2
• Η Χ δθλώνεται και παραμζνει global και μζςα ςτθ ςυνάρτθςθ
• Χ: Global
• Τυπϊνει 99
• Πλεσ οι μεταβλθτζσ είναι Global
• Δεν χρειάηεται να δθλωκοφν οι y & z
• Αναγνωρίηονται ωσ global λόγω του κανόνα LEGB
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια Παραδείγματα - 3
• Η Χ δθλϊνεται global ςε περιςςότερεσ ςυναρτιςεισ
• Το ποια τιμι κα ζχει κάποια ςτιγμι θ Χ εξαρτάται από το πϊσ κα κλθκοφν οι ςυναρτιςεισ
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια Παραδείγματα - 4
• Πταν μια μεταβλθτι παίρνει τιμι μζςα ςε ςυνάρτθςθ αυτόματα γίνεται local ςτθ ςυνάρτθςθ
• Global
• Local ςτθ func1()
• Non-local για τθ func2()
• Τυπϊνει 88
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Εμβέλεια Παραδείγματα - 5 • Η has_upper είναι local
ςτον χϊρο τθσ ςυνάρτθςθσ checkPass
• Στον χϊρο τθσ φωλιαςμζνθσ checkUpper δθλϊνεται nonlocal
• Άρα αναγνωρίηεται ωσ θ ίδια μεταβλθτι ςτον χϊρο τθσ περικλείουςασ checkPass
• Ραρόμοια για τισ μεταβλθτζσ has_lower & has_num
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Ορίςματα (Arguments) - 1
• Το πζραςμα οριςμάτων γίνεται με ανάκεςθ αντικειμζνων ςτα ονόματα των παραμζτρων (δθλ. τοπικϊν (local) μεταβλθτϊν τθσ ςυνάρτθςθσ)
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Ορίςματα (Arguments) - 2
• Πμωσ ςτθν πράξθ γίνεται κάτι διαφορετικό ανάλογα αν τα ορίςματα είναι αντικείμενα μεταλλάξιμα ι όχι
• (α) Μθ-μεταλλάξιμα αντικείμενα (Immutable) (πχ. ακζραιοι,
αλφαρικμθτικά):
• Ρερνοφν ςτθ ςυνάρτθςθ με δθμιουργία αντιγράφου του ορίςματοσ ςτθν τοπικι εμβζλεια τθσ ςυνάρτθςθσ • Δθλ. περνοφν ουςιαςτικά «με δθμιουργία αντιγράφου»
• (β) Μεταλλάξιμα (Mutable) αντικείμενα:
• Ρερνοφν ςτθ ςυνάρτθςθ χωρίσ δθμιουργία αντιγράφου
• Άρα κάκε μεταβολι τουσ ςτθν τοπικι εμβζλεια κακρεφτίηεται αμζςωσ και ςτθν κακολικι εμβζλεια • Δθλ. περνοφν «με δείκτθ»
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Ορίςματα Παράδειγμα - 1α
• (1) Πριν τθν κλιςθ
ΜΕΣΑΛΛΑΞΙΜΟ
ΜΗ-ΜΕΣΑΛΛΑΞΙΜΟ
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Ορίςματα Παράδειγμα - 1β
• (2) Κατά τθν κλιςθ: Ρζραςμα οριςμάτων
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Ορίςματα Παράδειγμα - 1γ
• (3) Εκτζλεςθ τθσ ςυνάρτθςθσ
• Για τθν ακζραια a (immutable) ζχει δθμιουργθκεί νζο αντικείμενο ‘4’
• Για τθ λίςτα b (mutable) ΔΕΝ δθμιουργικθκε νζο αντικείμενο: άρα ΚΑΘΕ αλλαγι ςτθ λίςτα b αντανακλά και ςτθ λίςτα L κακολικισ εμβζλειασ
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Ορίςματα Παράδειγμα - 1δ
• (4) Μετά τθν κλιςθ
• (5) Η ζξοδοσ του προγράμματοσ
• Χ: δεν ζχει αλλάξει τιμι
• L: είναι διαφορετικι
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Γενικόσ κανόνασ για τα ορίςματα ςυναρτήςεων
• Τα ορίςματα μιασ ςυνάρτθςθσ είναι τοπικζσ μεταβλθτζσ μζςα ςτθν εμβζλεια τθσ ςυνάρτθςθσ
εκτόσ εάν είναι μεταλλάξιμα (mutable) αντικείμενα
• οπότε κάκε αλλαγι ςτθ ςυνάρτθςθ επθρεάηει και τθ μεταβλθτι ςτο πρόγραμμα που κάνει τθν κλιςθ
ΣΜ. ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΘ Σ. ΔΗΜΗΣΡΙΑΔΗ 7
Π
Και τι κάνω αν η ςυμπεριφορά αυτή δεν είναι επιθυμητή;
• Λφςθ (Α): περάςτε ζνα αντίγραφο του μεταλλάξιμου αντικειμζνου ωσ όριςμα
• Ρχ. αντί για τθν κλιςθ myfunc(X, L) γράψτε myfunc(X, L[:])
• Λφςθ (Β): δθμιουργιςτε ζνα αντίγραφο του μεταλλάξιμου αντικειμζνου μζςα ςτθ ςυνάρτθςθ ϊςτε να μθν επθρεάηεται το αρχικό αντικείμενο
• Ρχ. αντί γράψτε: