Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν Ειςαγωγι ςτθν Python
Γ Μζροσ Modules, Αντικειμενοςτραφισ Προγραμματιςμόσ ςτθν Python, Classes, Objects, Αλλθλεπίδραςθ με αρχεία
Ειςαγωγι αρκρωμάτων (modules): import
Αρκρϊματα (modules) Ζνα άρκρωμα (module) είναι μια ςυλλογι από ςυναρτιςεισ. Ζνα άρκρωμα αποκθκεφεται ςε ζνα αρχείο με κατάλθξθ.py Μποροφμε να χρθςιμοποιιςουμε αρκρϊματα α) απευκείασ ενςωματωμζνα ςτθν ζκδοςθ τθσ Python που ζχουμε κατεβάςει, β) να κατεβάςουμε ζτοιμα από το διαδίκτυο ι γ) να δθμιουργιςουμε δικά μασ. Για να χρθςιμοποιιςουμε ζνα άρκρωμα ςε ζνα πρόγραμμα, κα πρζπει να το ειςαγάγουμε με χριςθ τθσ εντολισ import. 4
Ειςαγωγι ζτοιμου αρκρϊματοσ (module) Ειςαγωγι ζτοιμου αρκρωματοσ (module) math. Η python με τθν κλιςθ τθσ import ψάχνει ςτο φάκελο ςυςτιματοσ για να βρει τo math. Αν τo βρει μποροφμε να χρθςιμοποιιςουμε τισ ςυναρτιςεισ του. Στο παράδειγμα που ακολουκεί χρθςιμοποιοφμε τθν ςυνάρτθςθ για τθν εφρεςθ τθσ τετραγωνικισ ρίηασ ενόσ αρικμοφ sqrt. 5
Παράδειγμα 1: Κλιςθ module math Σε ζνα αρχείο python example_import.py γράφουμε: Τρζχοντασ το example_import.py βλζπουμε ωσ αποτζλεςμα ςτον shell: 6
Παράδειγμα 1: Κλιςθ module math Με τθν κλιςθ του math, ζχουμε πρόςβαςθ ςε όλεσ τισ ςυναρτιςεισ που περιλαμβάνει το module. Επομζνωσ, ζχοντασ εκτελζςει τθν εντολι import math ςτο προθγοφμενο παράδειγμα, μποροφμε να καλζςουμε και οποιαδιποτε άλλθ ςυνάρτθςθ μζςα ςτο math. Με αποτελζςματα: 7
Παράδειγμα 2: Απευκείασ κλιςθ sqrt. Αντί να ειςάγω όλο το module του math μπορϊ να καλζςω μόνο μια ςυγκεκριμζνθ ςυνάρτθςθ του module χρθςιμοποιϊντασ τθ ςφνταξθ: Λαμβάνοντασ ωσ αποτζλεςμα: 8
Φτιάχνοντασ δικά μασ modules Μποροφμε να φτιάξουμε και δικά μασ αρκρϊματα (modules) και να το κάνουμε import ςε κάποιο αρχείο. Για να δθμιουργιςουμε ζνα δικό μασ άρκρωμα αρκεί να δθμιουργιςουμε ζνα αρχείο με τθν επζκταςθ.py δθλαδι ζνα ςυνθκιςμζνο αρχείο python. Για να μπορεί θ python να βρει το αρκρωμα που δθμιουργιςαμε και να το τρζξει πρζπει να βρίςκεται α) ςτον ίδιο φάκελο με το πρόγραμμα που ειςάγουμε ι β) ςε ζναν από τουσ φακζλουσ ςτα καθοριςμζνα μονοπάτια ςυςτήματοσ. 9
Μονοπάτι ςυςτιματοσ Για να δείτε ποιοι φάκελοι ανικουν ςτο μονοπάτι ςυςτιματοσ μπορείτε να χρθςιμοποιιςετε το ενςωματωμζνο άρκρωμα (module) sys: Το άρκρωμα (module) sys παρζχει πρόςβαςθ ςε μεταβλθτζσ και παραμζτρουσ του διερμθνευτι (interpreter) και ςε ςυναρτιςεισ που είναι ςε άμεςθ αλλθλεπίδραςθ με αυτόν. 10
Παράδειγμα δθμιουργίασ και κλιςθσ module (1) Δθμιουργοφμε ζνα νζο module, δθλαδι ζνα νζο αρχείο με κατάλθξθ.py π.χ. my_first_module.py: 11
Παράδειγμα δθμιουργίασ και κλιςθσ module (2) Κάνουμε import του αρχείου ςτον shell ι καλϊντασ το import ςτθν αρχι κάποιου άλλου αρχείου π.χ. call_module.py και το τρζχουμε: 12
Αντικειμενοςτρεφισ Προγραμματιςμόσ ςτθν Python
Αντικειμενοςτρεφισ προγραμματιςμόσ Τρόποι οργάνωςθσ προγραμμάτων (κϊδικα): o o o Διαδικαςτικόσ (procedural ι imperative) Συναρτθςιακόσ (functional) Αντικειμενοςτρεφισ (object-oriented) Αντικείμενα (objects): οντότθτεσ οι οποίεσ ζχουν ςυγκεκριμζνεσ ιδιότθτεσ (attributes) ι/και μποροφν να εκτελοφν ςυγκεκριμζνεσ ενζργειεσ (methods) 14
Παραδείγματα αντικειμζνων Μία καρζκλα ζχει ιδιότθτεσ χρϊμα, φψοσ, υλικό,... Ζνα ορθογώνιο ζχει ιδιότθτεσ πλάτοσ, φψοσ, εμβαδόν, Μία γάτα ζχει ιδιότθτεσ όνομα, θλικία, φφλο, και εκτελεί διάφορεσ ενζργειεσ όπωσ: νιαουρίηει, τρζχει, ςκαρφαλϊνει, τρϊει, Ζνασ οδηγόσ μπορεί να κάνει ενζργειεσ όπωσ να ςτρίψει, φρενάρει, επιταχφνει, 15
Δθμιουργία αντικειμζνων Τα αντικείμενα δθμιουργοφνται από τισ κλάςεισ (classes). Η κλάςθ είναι ο οριςμόσ του αντικειμζνου, προςδιορίηει ποιεσ ιδιότθτεσ και ποιεσ μεκόδουσ κα ζχει το αντικείμενο. Όλα τα αντικείμενα τα οποία ανικουν ςτθν ίδια κλάςθ, κα ζχουν ίδιου τφπου ιδιότθτεσ και ίδιεσ μεκόδουσ, όμωσ οι τιμζσ των ιδιοτιτων κα διαφοροποιοφνται. Οι μζθοδοι είναι αντίςτοιχεσ με ςυναρτιςεισ που ανικουν ςε ςυγκεκριμζνθ κλάςθ αντικειμζνων. Κάκε αντικείμενο που δθμιουργείται ονομάηεται ςτιγμιότυπο ι instance τθσ κλάςθσ. 16
Ορολογία Τάξη (Class): Αποτελεί μια λογικι ενοποίθςθ ιδιοτιτων οι οποίεσ χαρακτθρίηουν όλα τα αντικείμενα (objects) τθσ Τάξθσ. Instance: Ζνα ςυγκεκριμζνο αντικείμενο μιασ Τάξθσ. Παράδειγμα: Το αντικείμενο p31 που ανικει ςτθν Τάξθ Students, αποτελεί ζνα ςυγκεριμζνο instance τθσ ςυγκεριμζνθσ Τάξθσ. Method: Είδοσ ςυνάρτθςθσ που ορίηεται μζςα ςτθ διλωςθ τθσ Τάξθσ. Class variable: Μεταβλθτι τθσ οποίασ θ τιμι είναι κοινι για όλα τα instances τθσ Τάξθσ. Instance variable: Μεταβλθτι θ οποία ορίηεται μζςα ςε μζκοδο και ανικει μόνο ςε ςυγκεκριμζνθ instance μιασ Τἀξθσ. 17
Δθμιουργία Τάξθσ ςτθν Python Η μεταβλθτι studentcount κα ενθμερϊνεται με το ςυνολικό αρικμό φοιτθτϊν, που κα ζχουν δθμιουργθκεί. Η τιμι τθσ studentcount κα ειναι κοινι για όλα τα αντικείμενα τθσ τάξθσ Student. 18
H μζκοδοσ init Συνάρτθςθ Καταςκευαςτήσ τθν οποία καλεί θ Python κάκε φορά που δθμιουργείται ζνα καινοφργιο αντικείμενο τθσ Τάξθσ. Στο παράδειγμά μασ, επικυμοφμε κάκε αντικείμενο τθσ Τάξθσ Student, να ζχει ζνα όνομα, ζνα πεδίο που κα ορίηει το ζτοσ του, κακϊσ και ζναν πίνακα με τα μακιματα που παρακολουκεί ο ςυγκεριμζνοσ φοιτθτισ. 19
Συνάρτθςθ-καταςκευαςτισ Η παράμετροσ self είναι υποχρεωτικι ςε μία μζκοδο (ςτθν αρχι τθσ λίςτασ παραμζτρων) και υποδθλϊνει (αναφζρεται ςτο) το ςυγκεριμζνο ςτιγμιότυπο (instance) τθσ τάξθσ, για το οποίο καλείται θ μζκοδοσ. Όταν καλείτε τθ μζκοδο, δεν χρειάηεται να ορίςετε τιμι για αυτι τθν παράμετρο, δίνεται αυτόματα από τθν python. 20
Μζκοδοσ για τθν εκτφπωςθ των ςτοιχείων κάκε αντικειμζνου τθσ Τάξθσ Student To τελευταίο μάκθμα τθσ λίςτασ ςυνοδεφεται απο., ενϊ τα προθγοφμενα ςτοιχεία τθσ λίςτασ ακολουκοφνται από,. 21
Δθμιουργία νζων αντικειμζνων 22
Χριςθ class variable Μετά τθ δθμιουργία των 2 αντικειμζνων, ποια είναι θ τιμι τθσ μεταβλθτισ studentcount; 23
Κλιςθ μεκόδων Αποτζλεςμα κλιςθσ τθσ μεκόδου displaystudent για το κάκε αντικείμενο που ζχει δθμιουργθκεί. 24
Παραδείγματα Built-in functions Αποτζλεςμα εκτζλεςθσ των παραπάνω εντολϊν 25
Παρατθριςεισ Τισ μεκόδουσ και τισ μεταβλθτζσ μίασ Τάξθσ, τισ δθλϊνουμε εςωτερικά τθσ Τάξθσ (όπωσ και ςτισ δομζσ ελζγχου και επανάλθψθσ). Η αρχικοποίθςθ των αντικειμζνων τθσ Τάξθσ και θ κλιςθ μεκόδων δεν γίνεται εςωτερικά τθσ Τάξθσ (δεν αφινουμε 4 κενά). 26
Χρθςιμοποίθςθ μεκόδων από διαφορετικζσ Τάξεισ Μζςα ςτο ίδιο αρχείο py. μποροφμε να δθλϊςουμε πολλζσ Τάξεισ. Στο προθγοφμενο παράδειγμα, αφοφ ζχουμε ορίςει τθν Τάξθ Student, και δουλεφοντασ ςτο ίδιο αρχείο, ορίηουμε τθν Τάξθ Lesson, θ οποία ουςιαςτικά περιζχει μία λίςτα τθσ οποίασ κάκε ςτοιχείο είναι ζνα αντικείμενο τθσ Τάξθσ Student. Στο παράδειγμα που ακολουκεί, τα αντικείμενα student1 και student2 ζχουν ιδθ αρχικοποιθκεί μζςα ςτθν Τάξθ Student (δείτε τθν διαφάνεια 68) Το πλιρεσ αρχείο που περιζχει τθ δθλωςθ των τάξεων Student και Lesson, βρίςκεται ςτο φάκελο Lab του eclass (όνομα αρχείου: mathima.py) 27
Παράδειγμα: mathima.py 28
Παράδειγμα: mathima.py (ςυνζχεια)
Αλλθλεπίδραςθ με αρχεία
Άνοιγμα/Δθμιουργία αρχείου Σφνταξθ εντολισ: f=open(filename,right) Η μεταβλθτι f είναι ζνα αντικείμενο τφπου File. Το όριςμα filename είναι τφπου String και υποδθλϊνει το όνομα του αρχείου. Το όριςμα right περιγράφει τον τρόπο με τον οποίο κα χρθςιμοποιθκεί το αρχείο.μπορεί να πάρει τισ ακόλουκεσ τιμζσ: 'r' : το αρχείο είναι μόνο για ανάγνωςθ. 'w : το αρχείο είναι μόνο για εγγραφι.ζνα αρχείο το οποίο ιδθ υπάρχει, τότε ςε περίπτωςθ νζασ εγγραφισ τα προθγοφμενα περιεχόμενα κα διαγραφοφν. 'r+' : Το αρχείο είναι και για ανάγνωςθ και για εγγραφι. 'a' : Σε περίπτωςθ εγγραφισ ςε ιδθ υπάρχον αρχείο, οι νζεσ εγγραφζσ κα προςτεκοφν ςτο τζλοσ του αρχείου. 31
H μζκοδοσ write Υποκζτουμε ότι μζςω τθσ εντολισ open ζχει αρχικοποιθκεί θ μεταβλθτι f. Για να εγγράψουμε μια νζα γραμμι ςτο αρχείο που ζχουμε ανοίξει, εκτελοφμε τθν ακόλουκθ εντολι: f.write( text\n ) Μετά τθν εκτζλεςι τθσ το αρχείο filename κα περιζχει μια νζα γραμμι με περιεχόμενο text. Ο χαρακτιρασ \n υποδθλϊνει αλλαγι γραμμισ. Εάν το δεφτερο όριςμα τθσ open είναι w, τότε τα προθγοφμενα περιεχόμενα του αρχείου filename κα διαγραφοφν, ενϊ αν είναι a το text κα προςτεκεί ςαν νζα γραμμι, ςτο τζλοσ του filename. 32
Τρόποι ανάγνωςθσ ενόσ αρχείου Απαιτείται να ζχει δoκεί το δικαίωμα r κατά τθν εκτζλεςθ τθσ εντολισ open Μζκοδοσ read(). Επιςτρζφει τα περιεχόμενα του αρχείου ςτο οποίο αναφζρεται το αντικείμενο τυπου File. Μζκοδοσ read(n). Επιςτρζφει τουσ n πρϊτουσ χαρακτιρεσ του αρχείου. Μζκοδοσ readline(). Διαβάηει το αρχείο γραμμι προσ γραμμι. Εάν εκτελεςτεί μία φορά επιςτρζφει μόνο τθν πρϊτθ γραμμι του αρχείου κτλ. Μζκοδοσ readlines(). Επιςτρζφει μία λίςτα με ςτοιχεία τισ γραμμζσ του αρχείου. Κάκε ςτοιχείο τθσ λίςτασ που αντιςτοιχεί ςε μία γραμμι ακολουκείται από τον χαρακτιρα \n. Η κλιςθ των παραπάνω ςυναρτιςεων από ζνα αντικείμενο τφπου File γίνεται με τθ χριςθ του χαρακτιρα:. Γενικότερα ςτθν Python τα αντικείμενα καλοφν τισ ςυναρτιςεισ με τθν χριςθ τθσ τελείασ (όπωσ και ςτθ Java). Εναλλακτικόσ τρόποσ για να εμφανίςουμε τα περιεχόμενα ενόσ αρχείου, γραμμι προσ γραμμι: 33
H μζκοδοσ close() Καλϊντασ τθν close() κλείνουμε το αρχείο, και απελευκερϊνουμε τουσ πόρουσ του ςυςτιματοσ που καταλάμβανε. Σφνταξθ: file.close() 34
Παράδειγμα εκτζλεςθσ μεκόδου read() Εμφανίηει ςτθν οκόνθ τα περιεχόμενα του αρχείου. Στιγμιότυπο εκτζλεςθσ: 35
Παράδειγμα εκτζλεςθσ μεκόδου read(n) Επιςτρζφει τουσ n πρϊτουσ χαρακτιρεσ του αρχείου. Στιγμιότυπο εκτζλεςθσ: 36
Παράδειγμα εκτζλεςθσ μεκόδου readline() Κάκε φορά που καλείται, επιςτρζφει και από μία γραμμι του file. Στιγμιότυπο εκτζλεςθσ: 37
Παράδειγμα εκτζλεςθσ μεκόδου readlines() Επιτρζφει μία λίςτα τθσ οποίασ κάκε κζςθ καταλαμβάνεται από τθν αντίςτοιχθ γραμμι τθσ λίςτασ. Στιγμιότυπο εκτζλεςθσ: 38
Λεξικό Συςχετιςμόσ κλειδιϊν (ονομαςιϊν) με τιμζσ (λεπτομζρειεσ). Το κλειδί πρζπει να ζχει μοναδικι τιμι. Σφνταξθ: d = {key1 : value1, key2 : value2} Τα κλειδιά του λεξικοφ δεν ταξινομοφνται αυτομάτωσ με κάποιο τρόπο. 39
Λεξικό Παράδειγμα Δθμιουργία μιασ ατηζντασ email διευκφνςεων ab : Διαγραφι ηεφγουσ κλειδιοφ-τιμισ με del 40