Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ. Δημητρακάκης
Συναρτήσεις (Functions) Στον προγραμματισμό, μια συνάρτηση αποτελεί μια ομαδοποίηση εντολών, δηλαδή ένα υποπρόγραμμα Οι εντολές από τις οποίες απαρτίζεται μια συνάρτηση συνολικά επιτελούν μια συγκεκριμένη λειτουργία Μια συνάρτηση έχει ένα όνομα, π.χ. sum() Έτσι, όταν θέλουμε να εκτελεστεί η λειτουργία που επιτελεί η συνάρτηση αντί να γράφουμε όλες τις εντολές, χρησιμοποιούμε μόνο το όνομα της συνάρτησης Η χρήση συναρτήσεων στον προγραμματισμό προσφέρει δύο πλεονεκτήματα: a. Code Reuse: μας επιτρέπει να επαναχρησιμοποιούμε κώδικα που έχουμε γράψει, ώστε να μη γράφουμε πολλές φορές όλες τις εντολές που απαιτούνται για μια λειτουργία b. Modularity: επιτρέπει στον κώδικα μας να επιμερίζεται σε μικρότερα στοιχεία. Έτσι όταν σε ένα πρόγραμμα καλούνται κάποιες συναρτήσεις αυτό είναι σα να αποτελείται από τουβλάκια όπου το καθένα κάνει μια ξεχωριστή δουλειά. Με αυτόν τον τρόπο ο αριθμός των γραμμών κώδικα που απαιτείται για ένα πρόγραμμα είναι μικρότερος και το κώδικας μας είναι πιο κομψός! Η Python προσφέρει κάποιες έτοιμες συναρτήσει (built-in functions), π.χ. range(), αλλά μπορούμε να δημιουργούμε και τις δικές μας συναρτήσεις, ανάλογα με τις ανάγκες του εκάστοτε προγράμματος (user-defined functions)
Συναρτήσεις που έχουμε ήδη χρησιμοποιήσει input(), π.χ. n = input( dose akeraio: ) raw_input(), π.χ. name = raw_input( pos se lene? ) range(), π.χ. akeraioi = range(1,10)
Ορίσματα εισόδου- εξόδου Όπως και στα μαθηματικά: z = f(x, y) έτσι και στον προγραμματισμό οι συναρτήσεις έχουν ορίσματα εισόδου και ορίσματα εξόδου arithmoi = range(0, 100, 10) Οι συναρτήσεις μπορούν να έχουν Κανένα έως απεριόριστο αριθμό ορισμάτων εισόδου Ένα ή κανένα όρισμα εξόδου
Σύνταξη συνάρτησης Μια συνάρτηση θα πρέπει πρώτα να την ορίσω και έπειτα να την καλέσω Ορισμός Συνάρτησης (Function Definition) def function_name(arg1, arg2, arg3): command1 Command2 return result Κλίση Συνάρτησης (Function Call) result = function_name(arg1, arg2,arge3) Η λέξη κλειδί def προέρχεται από τη λέξη definition που σημαίνει ορισμός Η λέξη return (επιστροφή) σηματοδοτεί το τέλος μιας συνάρτησης επιστρέφοντας το αποτέλεσμα (όρισμα εξόδου). Η λέξη return χρησιμοποιείται ακόμα κι όταν δεν υπάρχει όρισμα εξόδου
Παράδειγμα 1 #This is a function definition def printsum(a, b, c): #edo ypologizetai to athroisma sum = a+b+c print "to athroisma einai:,sum return #These are calls to the function #If you do not call the function, nothing will # be printed printsum(3, 4, 98) printsum(5, 18, 444)
Προαιρετικά ορίσματα εισόδου Κάποια από τα ορίσματα μιας συνάρτησης μπορεί να είναι προαιρετικά, π.χ. def printsum2(a, b=0, c=0): #edo ypologizetai to athroisma sum = a+b+c print "athroisma: ", sum return Αυτή η συνάρτηση μπορεί να καλεσθεί είτε με ένα, είτε με δύο είτε με τρία ορίσματα εισόδου, π.χ. printsum2(5) printsum2(5, 10) printsum2(5, 10, 25) Όπως φαίνεται στον ορισμό της printsum2 η προκαθορισμένη (default) τιμή για τα προαιρετικά ορίσματα είναι 0.
Μεταβλητό πλήθος ορισμάτων Στην python επιτρέπεται να δηλώσουμε ότι το πλήθος των ορισμάτων μιας συνάρτησης δεν είναι ορισμένο def printsum3(*numbers): s =0 #arxikopoihsh for n in numbers: s = s + n print "athroisma: ", s return Αυτή η συνάρτηση μπορεί να κληθεί με οποιοδήποτε πλήθος ορισμάτων, π.χ printsum3(5) printsum3(5, 10) printsum3(5, 10, 25) Εάν θέλω σαν όρισμα σε μια συνάρτηση μεταβλητού πλήθους ορισμάτων να δώσω έναν πίνακα τότε πρέπει να χρησιμοποιήσω το σύμβολο * και κατά την κλίση, π.χ. printsum3(*range(10, 100, 5))
Παράδειγμα 2 #This function has no output arguments #function definition def printinfo(name, age): print "Name: ", name print "Age: ", age return; #function calls printinfo("maria", 12) printinfo("giorgos", 24) printinfo("nikos", 56)
Ασκήσεις 1. Να υλοποιήσετε μια συνάρτηση με το όνομα getmax η οποία να δέχεται από ένα έως πέντε αριθμητικά ορίσματα και να επιστρέφει το μέγιστο από αυτά 2. Να υλοποιήσετε ξανά αυτή τη συνάρτηση ώστε να παίρνει μεταβλητό πλήθος ορισμάτων
Δομοστοιχεία (modules) Είναι συχνά χρήσιμο οι συναρτήσεις ή/και οι μεταβλητές που επιτελούν παρόμοιες λειτουργίες να ομαδοποιούνται στο ίδιο αρχείο το οποίο ονομάζεται δομοστοιχείο (module) Αυτό μας επιτρέπει να οργανώνουμε τον κώδικα μας σε λογικές ενότητες Η καλή οργάνωση του κώδικα ενός προγράμματος, τον κάνει ευκολότερο στη χρήση και στην κατανόηση
Παράδειγμα module circle (1/3) Μπορούμε να δημιουργήσουμε ένα module που να ενσωματώνει όλες τις ιδιότητες και τις μεταβλητές του γεωμετρικού σχήματος κύκλος: Αρχείο circle.py aktina = 3 #Synartisi pou epistrefei tin perimetro kykloy aktinas r def getperimeter(r = aktina): per = 2*3.14159*r return per; #Synartisi pou epistrefei to emvado kykloy aktinas r def getsurface(r= aktina): sur = 3.14159* r**2 return sur;
Παράδειγμα module circle (2/3) Σε αυτό το παράδειγμα ομαδοποιούνται όλες οι ιδιότητες ενός κύκλου: Ακτίνα, περίμετρος, εμβαδό Η ακτίνα αποθηκεύεται ως μεταβλητή, ενώ η περίμετρος και το εμβαδό υπολογίζονται από συναρτήσεις με βάση την ακτίνα Προσέξτε ότι σε αυτό το παράδειγμα οι δύο συναρτήσεις έχουν ως προαιρετικό όρισμα την ακτίνα. Αν δε δοθεί τιμή για το όρισμα r τότε λαμβάνεται υπόψη η τιμή της μεταβλητής aktina
Παράδειγμα module circle (2/3) To module αυτό μπορώ π.χ. να το καλέσω από το περιβάλλον της python ως εξής: >>> >>> import circle >>> print circle.aktina 3 >>> circle.getperimeter() 18.849539999999998 >>> circle.getperimeter(5) 31.4159 >>> Εάν αλλάξω κάτι στον κώδικα του circle.py μπορώ να το ξαναφορτώσω με την εντολή reload, ως εξής: >>> >>> reload(circle) <module 'circle' from 'circle.pyc'> >>> print circle.aktina 5 >>>
Χρήση Συναρτήσεων στο πρόγραμμά σας Τα modules δίνουν τη δυνατότητα να χρησιμοποιείτε τις συναρτήσεις σας σε οποιοδήποτε πρόγραμμα Αυτό επιτυγχάνεται με τη λέξη import και φυσικά με το όνομα του module Π.χ. σε ένα αρχείο program.py μπορώ να γράψω: import circle print Hello World print circle.getperimeter(3)
Έτοιμα Python Modules H python προσφέρει και κάποια έτοιμα modules τα οποία μπορείτε να τα κάνετε import στο πρόγραμμά σας και να καλείτε τις συναρτήσεις τους. Παράδειγμα τέτοιου modules είναι το math, το οποίο σας δίνει κάποιες έτοιμες μαθηματικές συναρτήσεις όπως: Τριγωνομετρικές, εκθετικές, κλπ. Περισσότερα για τις συναρτήσεις του math module: https://docs.python.org/3/library/math.html
Παράδειγμα χρήσης math import math #prints point of a sinewave def oscil(n): for i in range(n): print math.sin(2*math.pi*i/(n+0.0)) return oscil(10) print "Another math function", math.exp(2)
Άσκηση Να υλοποιήσετε ένα module με το όνομα cylinder (κύλινδρος) με δύο ιδιότητες r, h (ακτίνα, ύψος) και δύο συναρτήσεις εκ των οποίων η μία να επιστρέφει την επιφάνια του κυλίνδρου και η άλλη τον όγκο του Να εισάγετε αυτό το module στο πρόγραμμα σας και να καλέσετε τουλάχιστον μία από τις δύο συναρτήσεις Υπενθυμίζεται ότι V = π*r 2* h και S = 2*π*r*h
Περισσότερες πληροφορίες Python Functions http://www.tutorialspoint.com/python/python_fu nctions.htm Python Modules http://www.tutorialspoint.com/python/python_m odules.htm