1404_book_u4

29
7/21/2019 1404_book_u4 http://slidepdf.com/reader/full/1404booku4 1/29  1 ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Προγράμματα Συμπληρωματικής Εκπαίδευσης  Με τη  χρήση καινοτόμων  μεθόδων εξ  αποστάσεως εκπαίδευσης 1404 - ΕΙΣΑΓΩΓΗ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PYTHON 

description

SDFV

Transcript of 1404_book_u4

Page 1: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 1/29

  1

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ 

Προγράμματα Συμπληρωματικής Εκπαίδευσης 

 Με τη  χρήση καινοτόμων  μεθόδων εξ  αποστάσεως εκπαίδευσης 

1404 - ΕΙΣΑΓΩΓΗ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PYTHON 

Page 2: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 2/29

  2

 

 © Copyright 2015, Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών, Π. Ε. Πετράκης.

Η έντυπη, ηλεκτρονική και γενικά κατά οποιοδήποτε τρόπο αναπαραγωγή, δημοσίευση 

ή  χρησιμοποίηση  όλου  ή  μέρους  του  υλικού  έργου  αυτού, απαγορεύεται  χωρίς  την 

έγγραφη έγκριση του κατόχου των πνευματικών δικαιωμάτων του έργου.

Page 3: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 3/29

  3

Το παρόν έντυπο αποτελεί τμήμα του εκπαιδευτικού υλικού του μαθήματος “Εισαγωγή 

στη  Γλώσσα  Προγραμματισμού  Python”. Αποτελεί  απαραίτητο  συμπλήρωμα  του 

ηλεκτρονικού  υλικού  που  βρίσκεται στην  πλατφόρμα  και  αναπόσπαστο  κομμάτι  της 

εκπαιδευτικής διαδικασίας.

Η  τέταρτη  διδακτική  ενότητα  αποσκοπεί  στην  εξοικείωση  των  εκπαιδευόμενων  με  τις 

βασικές αρχές και τη  χρήση των συναρτήσεων και των δομοστοιχείων Python. Επίσης,

στοχεύει στην  εξοικείωσή  τους με  τη συγγραφή απλών προγραμμάτων και σεναρίων 

σε αυτά τα αντικείμενα. Για το λόγο αυτό, παρουσιάζονται αναλυτικά τα βασικά στοιχεία 

με απλά παραδείγματα προς εκτέλεση από τους εκπαιδευόμενους.

Τη  συγγραφή  του  συγκεκριμένου  εκπαιδευτικού  υλικού  πραγματοποίησε  ο  κ .

Ρηγόπουλος  Γιώργος, εξωτερικός συνεργάτης  του Προγράμματος  Συμπληρωματικής 

εξ Αποστάσεως Εκπαίδευσης του Εθνικού και Καποδιστριακού Πανεπιστημίου Αθηνών.

Page 4: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 4/29

  4

Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α  

ΔΙΔΑΚΤΙΚΗ ΕΝΟΤΗΤΑ 4. ΣΥΝΑΡΤΗΣΕΙΣ – ΔΟΜΟΣΤΟΙΧΕΙΑ ...................................................... 5 

ΕΙΣΑΓΩΓΙΚΕΣ ΠΑΡΑΤΗΡΗΣΕΙΣ ..................................................................................................... 7 

ΥΠΟΕΝΟΤΗΤΑ 1.  ΣΥΝΑΡΤΗΣΕΙΣ ........................................................................................... 8 

ΥΠΟΕΝΟΤΗΤΑ 2.  ΔΟΜΟΣΤΟΙΧΕΙΑ .................................................................................... 20 

 ΣΥΝΟΨΗ .............................................................................................................................. 28 

ΒΙΒΛΙΟΓΡΑΦΙΑ ................................................................................................................... 29 

Page 5: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 5/29

  5

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ 

Προγράμματα Συμπληρωματικής Εκπαίδευσης 

 Με τη  χρήση καινοτόμων  μεθόδων εξ  αποστάσεως εκπαίδευσης 

1404 - ΕΙΣΑΓΩΓΗ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PYTHON 

ΔΙΔΑΚΤΙΚΗ ΕΝΟΤΗΤΑ 4. ΣΥΝΑΡΤΗΣΕΙΣ – ΔΟΜΟΣΤΟΙΧΕΙΑ 

Page 6: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 6/29

  6

Page 7: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 7/29

Page 8: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 8/29

  8

ΥΠΟΕΝΟΤΗΤΑ 1. ΣΥΝΑΡΤΗΣΕΙΣ 

Στα  πλαίσια  της  υποενότητας  αυτής, θα  παρουσιαστούν  και  αναλυθούν  τα  βασικά 

στοιχεία  των  συναρτήσεων  της  Python με  τη  βοήθεια  παραδειγμάτων   χρήσης  για εξοικείωση από τους εκπαιδευόμενους.

1.1 Βασικοί ορισμοί 

Η  Python, όπως  και  οι  περισσότερες  γλώσσες  προγραμματισμού, λειτουργεί  με 

πολλαπλά  επίπεδα  αφαίρεσης. Αυτό  σημαίνει, πολύ  συνοπτικά, ότι  ανάλογα  με  τη 

φύση  ενός  προβλήματος  προγραμματισμού, έχουμε  τη  δυνατότητα  να 

δημιουργήσουμε  αφαιρετικές  δομές  στην  γλώσσα, οι  οποίες  σχηματοποιούν  τα 

δεδομένα και τις έννοιες σε αντικείμενα ή ομάδες αντικειμένων. Η κάθε γλώσσα έχει το 

δικό της τρόπο για τη δημιουργία δομών και τη διαχείρισή τους. Η Python υποστηρίζει 

αντικειμενοστρεφείς δομές, όπως είναι οι κλάσεις, αλλά και συναρτήσεις ή μεθόδους.

Η συνάρτηση είναι μια δομή, ένα σύνολο κώδικα, το οποίο λειτουργεί ως μια οντότητα 

και  εκτελεί  συνήθως  μια  δεδομένη  λειτουργία. Ο  λόγος  που  κατασκευάζουμε  και 

 χρησιμοποιούμε συναρτήσεις  είναι ότι μπορούμε να απλοποιήσουμε  τον  κώδικά μας 

θέτοντας  εργασίες, που  είναι  κοινές  και  επαναλαμβάνονται, σε συναρτήσεις. Επίσης,

είναι  πολύ  ευκολότερη  η  βελτιστοποίηση  ορισμένων  συχνά   χρησιμοποιούμενων 

συναρτήσεων, ειδικά των αριθμητικών, από ό,τι το σύνολο ενός προγράμματος.

 Ένα  βασικό  στοιχείο  μιας  συνάρτησης  είναι  ότι  δέχεται  ορίσματα  ως  είσοδο  και 

επιστρέφει  αποτέλεσμα  ως  έξοδο. Εκτός  αυτών, ενδέχεται  να  μεταβάλλει  και  να 

επηρεάζει και αντικείμενα ευρύτερα κατά την εκτέλεσή της.

Για  να  ορίσουμε  μια  συνάρτηση  στην  Python  χρησιμοποιούμε  την  ακόλουθη  γενική 

σύνταξη, όπου  οι  παράμετροι  είναι  τα  ορίσματα  εισόδου.  Όπως  και  με  τις  δομές 

ελέγχου, το σώμα σε μια συνάρτηση καθορίζεται από το επίπεδο εσοχής των γραμμών 

και όχι από κάποιους  χαρακτήρες.

Το παρακάτω παράδειγμα ορίζει τη συνάρτηση func1. Η συνάρτηση δέχεται ορίσματα 

οποιοδήποτε τύπου και επιστρέφει ένα αποτέλεσμα.

Page 9: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 9/29

  9

 

Μια ακόμη συνάρτηση είναι η παρακάτω, η οποία κατασκευάζει ένα γράφημα:

Αν  και οι συναρτήσεις  της  Python μπορεί να  επιστρέφουν  κάποια  τιμή, η  χρήση  της 

τιμής  είναι  θέμα  του  προγραμματιστή. Στο  παρακάτω  παράδειγμα  η  τιμή  που 

επιστρέφεται  αρχικά  δεν  συνδέεται  με  κάποια  μεταβλητή  αλλά  εκτυπώνεται  στον 

διερμηνευτή. Στη συνέχεια η τιμή συνδέεται με την μεταβλητή x για να αξιοποιηθεί στην 

συνέχεια.

Page 10: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 10/29

  10

 

Εάν δεν υπάρχει  εντολή  return στο σώμα  της συνάρτησης, τότε  επιστρέφεται η  ειδική 

τιμή None και εάν εκτελείται η return arg, τότε επιστρέφεται η τιμή του arg. Από τη στιγμή 

που εκτελείται το return σε μια συνάρτηση, δεν εκτελείται τίποτε άλλο από το σώμα μιας 

συνάρτησης.

Η συνήθης πρακτική για την τεκμηρίωση του κώδικα υποστηρίζεται τόσο από τα σχόλια 

γραμμής  που  ξεκινούν  με  τον   χαρακτήρα  #, όσο  και  με  τις  συμβολοσειρές 

τεκμηρίωσης. Οι  συμβολοσειρές  τεκμηρίωσης  είναι  γενικά  συμβολοσειρές  που 

ακολουθούν  αμέσως  μετά  την  πρώτη  γραμμή  του  ορισμού  μιας  συνάρτησης  και 

ορίζονται  συνήθως  με  τριπλά  εισαγωγικά  για  να  επιτρέπουν  πολλαπλές  γραμμές 

τεκμηρίωσης. Η τιμή της μπορεί να ανακτηθεί με την εκτύπωση  .

Page 11: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 11/29

Page 12: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 12/29

  12

 

Ο δεύτερος τρόπος για την μεταβίβαση τιμής σε όρισμα σε μια συνάρτηση είναι με τη 

 χρήση  του ονόματος  της αντίστοιχης παραμέτρου  της συνάρτησης αντί για  τη θέση 

της. Από  το  προηγούμενο  παράδειγμα  έχουμε  το  παρακάτω, όπου  η  κλήση  της 

συνάρτησης γίνεται με  χρήση του ονόματος του ορίσματος. Οπότε δεν έχει σημασία η 

σειρά με  την οποία  χρησιμοποιούμε  τα ορίσματα όταν καλούμε  την συνάρτηση, κάτι 

που είναι  ιδιαίτερα  χρήσιμο όταν ορίζονται συναρτήσεις με μεγάλο αριθμό ορισμάτων με τα περισσότερα από αυτά να έχουν κοινές προκαθορισμένες τιμές.

Page 13: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 13/29

  13

Τέλος, οι συναρτήσεις της Python μπορούν να οριστούν ώστε να  χειρίζονται μεταβλητό 

αριθμό ορισμάτων. Σε αυτή  την περίπτωση  τα ορίσματα  τα οποία  είναι άγνωστα  και 

δεν  έχουν οριστεί συλλέγονται  και αποθηκεύονται σε  μια πλειάδα  ή  ένα  λεξικό. Αυτό 

μπορεί να γίνει ως εξής:

 

Αν  έχουμε  σε  μια  συνάρτηση  άγνωστο  αριθμό  από  ορίσματα, μπορούμε  να  τα 

συλλέξουμε σε μια λίστα αν τοποθετήσουμε τον  χαρακτήρα  * στο τελευταίο όνομα 

από τα ορίσματά της. Αυτό έχει ως αποτέλεσμα όλα τα πλεονάζοντα ορίσματα σε 

μια  κλήση  της  συνάρτησης  να  συλλέγονται  και  να  ανατίθενται  ως  πλειάδα  στη 

δεδομένη παράμετρο.

Για παράδειγμα:

Εδώ για παράδειγμα η συνάρτηση func3 έχει τρία ορίσματα, με το τρίτο να έχει 

τον  χαρακτήρα * στο όνομά του.  Όταν καλείται η συνάρτηση έχει στην κλήση 

της έξι ορίσματα. Οι δύο πρώτες τιμές ανατίθενται στις μεταβλητές srt1 και str2

ενώ οι υπόλοιπες ανατίθενται στην μεταβλητή str3 ως μια πλειάδα τιμών.

 Εκτός από το προηγούμενο, μπορούμε να έχουμε αυθαίρετο αριθμό από ορίσματα 

που  μεταβιβάζονται  με  λέξη  κλειδί, τα  οποία  δεν  έχουν  αντίστοιχη  συνώνυμη 

παράμετρο  στη  λίστα  παραμέτρων. Αυτά  μπορούμε  να  τα  συλλέξουμε  εάν  στην 

τελική παράμετρο στην λίστα παραμέτρων τοποθετηθούν οι  χαρακτήρες  **. Αυτή η 

Page 14: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 14/29

  14

δήλωση θα οδηγήσει στην συλλογή των επιπλέον ορισμάτων στην μεταβλητή με τα 

** σε μορφή λεξικού.

Για παράδειγμα:

Εδώ η συνάρτηση  func4 δέχεται  τρία ορίσματα. Στην  κλήση  της υπάρχουν  8

ορίσματα. Οι τιμές στα δύο πρώτα ανατίθενται στις μεταβλητές str1 και str2, ενώ 

οι υπόλοιπες 6 ανατίθενται στην μεταβλητή str3 ως λεξικό.

Οι παραπάνω τρόποι ανάθεσης τιμών σε ορίσματα είναι αρκετά ευέλικτοι και παρέχουν 

αρκετές δυνατότητες στον προγραμματισμό με την Python.

Page 15: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 15/29

  15

1.3 Εμβέλεια μεταβλητών 

Οι  μεταβλητές ανάλογα  με  το  πού  ορίζονται  μπορούν  να  είναι  προσπελάσιμες από 

ορισμένα  μόνο  τμήματα  κώδικα  ή  ευρύτερα  τμήματα. Αυτό  καθορίζεται  από  τον 

ορισμό  τους αλλά  και από  τη  χρήση λέξεων  κλειδιών. Ανάλογα με  την  εμβέλειά  τους διακρίνονται σε τοπικές, μη τοπικές και καθολικές.

Οι μεταβλητές που ορίζονται στο σώμα μιας συνάρτησης είναι τοπικές και είναι τοπικές 

σε κάθε κλήση της συνάρτησης. Οι μεταβολές που πραγματοποιούνται σε αυτές όταν 

εκτελείται  η  συνάρτηση  δεν  έχουν  καμία  επίδραση  σε  μεταβλητές  εκτός  της 

συνάρτησης. Για παράδειγμα, η μεταβλητή  x παρακάτω που βρίσκεται στο σώμα της 

συνάρτησης δεν επηρεάζει την τιμή κάποιας μεταβλητής με το όνομα x που βρίσκεται 

έξω από την συνάρτηση.

Υπάρχουν, όμως, μεταβλητές που θέλουμε  να  επηρεάζονται  εκτός μιας συνάρτησης 

από  αρκετές  συναρτήσεις  ή  τμήματα  κώδικα. Στην  περίπτωση  αυτή  ορίζουμε  μια 

μεταβλητή ως καθολική. Μια μεταβλητή μπορεί να δηλωθεί ως καθολική  εάν δηλωθεί 

ως τέτοια πριν από τη  χρήση της με την εντολή global. Οι καθολικές μεταβλητές μπορεί 

να  προσπελαστούν  και  να  μεταβληθούν  από  τη  συνάρτηση. Υπάρχουν  εκτός  της 

συνάρτησης  και  είναι  επίσης  δυνατό  να  προσπελαστούν  και  να  μεταβληθούν  από 

διαφορετικές  συναρτήσεις  που  τις  δηλώνουν  ως  καθολικές  ή  από  κώδικα  που  δεν 

περιλαμβάνεται  σε  μια  συνάρτηση. Για  παράδειγμα, η  μεταβλητή  y ορίζεται  ως 

καθολική.

Page 16: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 16/29

  16

 

 Όταν μια μεταβλητή δεν  είναι  καθολική αλλά βρίσκεται ανάμεσα σε  δύο  επίπεδα, για 

παράδειγμα  σε  βρόχο, τότε  είναι  μη  τοπική. Για  να  μπορεί  να  την  μεταβάλλει  μια 

συνάρτηση που βρίσκεται σε εσωτερικό επίπεδο  χρησιμοποιούμε τη δήλωση nonlocal.

Για παράδειγμα, παρακάτω ορίζουμε  την μεταβλητή  ως  καθολική  και  την 

ως τοπική για την συνάρτηση func1 και non local για την func2.

Το βασικό σημείο με την εμβέλεια είναι ότι εάν θέλετε να αναθέσετε τιμή σε μια μεταβλητή 

που υπάρχει εκτός μιας συνάρτησης, πρέπει να δηλώσετε ρητά εάν η μεταβλητή αυτή 

θα  είναι  nonlocal ή  global. Αν  δεν   χρησιμοποιηθούν  οι  λέξεις  κλειδιά  global και 

nonlocal, οι μεταβλητές δεν θα μπορούν να μεταβληθούν από την func2.

Page 17: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 17/29

  17

 

1.4 Ειδικές περιπτώσεις 

Παρακάτω  αναφέρουμε  ορισμένες  ειδικές  περιπτώσεις  συναρτήσεων  που 

παρουσιάζουν ενδιαφέρον. Πρόκειται για τις συναρτήσεις γεννήτορες (generators) και 

τους decorators.

 

Ο γεννήτορας είναι μια ειδική συνάρτηση, η οποία μπορεί να  χρησιμοποιηθεί για να 

οριστούν  ειδικοί  επαναλήπτες  (iterators), οι  οποίοι  είναι  τμήματα  κώδικα  που 

εκτελούνται με επανάληψη.  Όταν οριστεί μια συνάρτηση γεννήτορας, επιστρέφεται η 

τιμή  κάθε  επανάληψης  με  την  λέξη  κλειδί  yield αντί  της  return μιας  κανονικής 

συνάρτησης. Ο γεννήτορας επιστρέφει μια τιμή, και, αν κληθεί πάλι, συνεχίζει από το 

σημείο που κλήθηκε η yield την προηγούμενη φορά.

Για παράδειγμα, η παρακάτω συνάρτηση γεννήτορας έχει ένα βρόχο while, ο 

οποίος περιορίζει τον αριθμό επαναλήψεων όπου θα εκτελεστεί ο γεννήτορας.

Page 18: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 18/29

  18

 

 Οι  συναρτήσεις  είναι  αντικείμενα  και  ως  τέτοιες  μπορούν  να  ανατεθούν  σε 

μεταβλητές.  Έτσι, οι  συναρτήσεις  μπορούν  να  περάσουν  ως  ορίσματα  σε  άλλες 

συναρτήσεις  και  να  επιστρέψουν  πίσω  ως  τιμές  από  άλλες  συναρτήσεις. Ο 

decorator είναι  μια  συντακτική  δομή  που  επιτρέπει  να  ενσωματώσουμε  μια 

συνάρτηση μέσα σε μια άλλη με την προσθήκη μιας γραμμής κώδικα. Η  χρήση ενός 

decorator περιλαμβάνει  δύο  τμήματα. Αρχικά  ορίζεται  η  συνάρτηση  που  θα 

ενσωματώσει (decorate) άλλες συναρτήσεις και στη συνέχεια τίθεται ο  χαρακτήρας 

@ και  η  λέξη  κλειδί  decorate αμέσως  πριν  από  την  συνάρτηση  που  θα 

ενσωματωθεί. Η συνάρτηση decorator πρέπει να έχει μια συνάρτηση ως όρισμα και 

να επιστρέψει μια συνάρτηση.

Για  παράδειγμα, παρακάτω  ορίζουμε  μια  συνάρτηση, την  ,

που   χρησιμοποιείται  ως  όρισμα  και  επιστρέφει  μια  απλή  συμβολοσειρά. Η 

συνάρτηση  αυτή  τίθεται  ως  όρισμα  στην  . Η 

περιέχει μια εσωτερική συνάρτηση, την  , η οποία με τη σειρά της 

εκτελείται. Η  επιστρέφει  την  συνάρτηση  ως 

απάντηση.

Page 19: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 19/29

  19

 

Το προηγούμενο παράδειγμα με  τη  χρήση decorator είναι πλέον ως  εξής. Το 

αποτέλεσμα είναι το ίδιο αλλά ο κώδικας είναι περισσότερο ευανάγνωστος.

Page 20: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 20/29

  20

ΥΠΟΕΝΟΤΗΤΑ 2. ΔΟΜΟΣΤΟΙΧΕΙΑ 

Στα πλαίσια της υποενότητας αυτής, θα παρουσιαστούν ορισμένα βασικά στοιχεία των 

δομοστοιχείων  (modules) της  Python με  παραδείγματα  για  εξοικείωση  από  τους εκπαιδευόμενους.

2.1 Βασικά στοιχεία 

 Όταν εκτελούμε απλά σενάρια ή προγράμματα δεν μας ενδιαφέρει σε μεγάλο βαθμό η 

οργάνωση  του  κώδικα.  Όταν  όμως  ένα  πρόγραμμα  αποτελείται  από  πλήθος 

συναρτήσεων και άλλων αντικειμένων, τότε η καλή οργάνωση είναι αναγκαία, τόσο για 

την  συντήρηση  του  κώδικα  όσο  και  για  την  χρήση  των  ήδη  έτοιμων συναρτήσεων.

 Ένας κανόνας που επίσης ισχύει είναι ότι δεν υπάρχει λόγος να αναλώσουμε  χρόνο για 

να δημιουργήσουμε κάτι που ήδη υπάρχει και είναι βελτιστοποιημένο. Σε κάθε γλώσσα 

προγραμματισμού  υπάρχουν  τμήματα  κώδικα  τα  οποία  μπορούμε  να 

επαναχρησιμοποιήσουμε με την μορφή βιβλιοθηκών ή δομοστοιχείων.

Στην  Python η  οργάνωση  του  κώδικα  πραγματοποιείται  με  τη  χρήση  δομοστοιχείων 

(modules).  Ένα δομοστοιχείο είναι μια μορφή οργάνωσης κώδικα και ορίζει μια ομάδα 

από συναρτήσεις ή άλλα αντικείμενα της Python. Πρόκειται γενικά για ένα αρχείο που 

περιέχει κώδικα Python και το όνομά του απορρέει από το όνομα του αρχείου. Η λογική 

που  υπάρχει  πίσω  από  ένα  δομοστοιχείο  είναι  η  ομαδοποίηση  συγγενικών 

αντικειμένων.

Εκτός από αυτό, η  χρήση  τους βοηθά  και στην αποφυγή  του ασυμβίβαστου μεταξύ 

ονομάτων. Μια συνάρτηση που υπάρχει σε δύο δομοστοιχεία με  το  ίδιο όνομα αλλά 

διαφορετική λειτουργία μπορεί να προσπελαστεί ως module1.func1 και module2.func1

 χωρίς πρόβλημα.

Αυτό  γιατί  η  Python  χρησιμοποιεί  τον  λεγόμενο   χώρο  ονομάτων  (namespace). Ο 

 χώρος ονομάτων  είναι  ένα λεξικό από  τα αναγνωριστικά που  είναι διαθέσιμα σε  ένα 

τμήμα κώδικα, μια κλάση, ένα δομοστοιχείο και ούτω καθεξής. Κάθε δομοστοιχείο έχει 

τον δικό του  χώρο ονομάτων και αυτό βοηθά την διένεξη (conflict) στην ονοματολογία.

 Ένα δομοστοιχείο μπορεί είτε να είναι έτοιμο για  χρήση ή να δημιουργηθεί από εμάς για 

κάποιο σκοπό. Για την δημιουργία ενός δομοστοιχείου δημιουργήστε ένα αρχείο με το 

όνομα  και  εισάγετε  σε  αυτό  τον  παρακάτω  κώδικα, ή  μια  άλλη 

συνάρτηση που θέλετε.

Page 21: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 21/29

  21

 

Το αρχείο  το αποθηκεύετε στον φάκελο που βρίσκεται  το  εκτελέσιμο 

της  Python, ανάλογα  με  τη  διανομή  που  έχετε  εγκαταστήσει. Ο  παραπάνω  κώδικας 

ορίζει μια απλή συνάρτηση που λαμβάνει ένα όρισμα και το επιστρέφει προσθέτοντάς 

το  στον  εαυτό  του. Η  κατάληξη  .py είναι  υποχρεωτική  για  όλα  τα  αρχεία  με  κώδικα 

Python.

Αν τώρα δώσουμε τις παρακάτω εντολές θα λάβουμε σφάλμα.

Αυτό  γιατί  η  Python δεν  έχει  ενσωματωμένη  κάποια  συνάρτηση  . Αν 

δώσουμε όμως τις παρακάτω εντολές θα εκτελεστούν σωστά.

Αυτό που άλλαξε  είναι ότι  εισάγαμε  τον ορισμό  της συνάρτησης  από  το 

αρχείο  με  την  χρήση της  εντολής  import.  Όμως ο νέος ορισμός δεν 

είναι απευθείας προσπελάσιμος, καθώς αν δώσουμε μόνη της την εντολή  ,

θα λάβουμε σφάλμα. Πρέπει να δηλώσουμε ως πρόθεμα το όνομα του δομοστοιχείου το οποίο την περιέχει.

Οι  ορισμοί  μέσα  σε  ένα  δομοστοιχείο  μπορούν  να  προσπελάσουν  και  άλλους 

ορισμούς εντός του δομοστοιχείου,  χωρίς να απαιτείται να  χρησιμοποιηθεί το πρόθεμα 

του  δομοστοιχείου. Επίσης, μπορείτε  να  δηλώσετε  και  να  εισάγετε ονόματα από  ένα 

δομοστοιχείο με τέτοιο τρόπο ώστε να μην  χρειάζεται να δηλωθεί και το πρόθεμα του 

δομοστοιχείου. Για παράδειγμα:

Page 22: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 22/29

  22

 

Το όνομα  είναι τώρα άμεσα προσπελάσιμο επειδή το ζητήσαμε με τη  χρήση 

της εντολή:

Σε  αυτή  την  περίπτωση, όμως, οποιαδήποτε  άλλη  συνάρτηση  του  δομοστοιχείου 

απαιτείται  να  κληθεί  με  τη  χρήση  της  εντολής  , καθώς  δεν  την 

εισάγαμε ρητά.

Αν ένα δομοστοιχείο μεταβληθεί, η εντολή import δεν θα το φορτώσει πάλι. Σε αυτή την 

περίπτωση  πρέπει  να  χρησιμοποιηθεί  η  συνάρτηση  reload. Η  reload περιέχεται  στο 

δομοστοιχείο  imp. Το δομοστοιχείο  imp παρέχει διεπαφή για  τους μηχανισμούς πίσω 

από την εισαγωγή δομοστοιχείων.

 Όταν εισάγεται ένα δομοστοιχείο το σύνολο του κώδικά του αναλύεται συντακτικά και 

εάν βρεθεί κάποιο λάθος, τότε παράγεται σφάλμα. Αν όλα είναι σωστά, δημιουργείται 

ένα  αρχείο  με  κατάληξη  .pyc, το  οποίο  περιέχει  τον  ενδιάμεσο  κώδικα  της  Python

(bytecode).

2.2 Χρήση 

Η Python ως γλώσσα είναι οργανωμένη σε βιβλιοθήκες με μια ιεραρχική δομή ώστε να 

είναι  εύχρηστη. Οι  βιβλιοθήκες  αποτελούν  τα  δομοστοιχεία. Από  τη  στιγμή  που 

εγκαταστήσουμε την Python, όλη η λειτουργικότητα στα δομοστοιχεία της βιβλιοθήκης 

είναι  στη  διάθεσή  μας. Το  μόνο  που   χρειάζεται  είναι  να  εισάγουμε  τα  κατάλληλα 

δομοστοιχεία  πριν  από  την   χρήση  των  συναρτήσεων. Για  να  εισάγουμε  ένα 

Page 23: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 23/29

  23

δομοστοιχείο στον κώδικά μας,  χρησιμοποιούμε την εντολή  import. Αυτή αναζητά ένα 

δομοστοιχείο με το συγκεκριμένο όνομα, αναλύει συντακτικά το περιεχόμενό του και το 

κάνει  διαθέσιμο  στο  πρόγραμμά  μας. Αν  το  δομοστοιχείο  δεν  βρεθεί, θα  προκύψει 

σφάλμα. Σε αυτή  την  περίπτωση  κάθε αναφορά στον  κώδικά  μας σε  ονόματα  που 

βρίσκονται μέσα στο δομοστοιχείο πρέπει να περιέχει το πρόθεμα του δομοστοιχείου.

Για παράδειγμα:

Εκτός  από  την  γενική  μορφή  της  import, μπορούμε  να  εισάγουμε  στον  κώδικα 

συγκεκριμένα  ονόματα  από  το  δομοστοιχείο. Κάθε  ένα  από  τα  ονόματα  θα  είναι 

διαθέσιμο  στον  κώδικά  μας   χωρίς  την  ανάγκη  δήλωσης  του  ονόματος  του 

δομοστοιχείου ως πρόθεμα.

Για παράδειγμα:

Τέλος μπορούμε να  χρησιμοποιήσουμε την γενικότερη επιλογή.

όπου το * υπονοεί όλα τα ονόματα στο δομοστοιχείο modulename.

Page 24: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 24/29

  24

 

 Όταν  οριστεί  η  import, η  Python αναζητά  για  τα  δομοστοιχεία  στο  μονοπάτι  του 

λειτουργικού συστήματος το οποίο καθορίζεται από την μεταβλητή path. Η μεταβλητή 

είναι προσπελάσιμη από το δομοστοιχείο sys. Εάν δεν βρεθεί το σχετικό δομοστοιχείο σε 

κάποιο μονοπάτι, τότε παράγεται σφάλμα. Για παράδειγμα:

Αν δημιουργήσουμε δικά μας δομοστοιχεία για να διασφαλιστεί ότι  τα προγράμματά 

μας μπορούν να τα  χρησιμοποιήσουν πρέπει: είτε να  τοποθετήσουμε  τα δομοστοιχεία μας σε  ένα  κατάλογο από αυτούς που η 

Python αναζητά για δομοστοιχεία, ή 

 να  τοποθετήσουμε  όλα  τα  δομοστοιχεία  που   χρησιμοποιεί  η  Python για  ένα 

πρόγραμμα στον ίδιο κατάλογο με το πρόγραμμα, ή 

 να δημιουργήσουμε ένα κατάλογο ο οποίος θα κρατά τα δομοστοιχεία μας και να 

μεταβάλουμε την μεταβλητή sys.path ώστε να περιέχει αυτό το νέο κατάλογο.

 Όταν  τα  εσωτερικά  ονόματα  (μεταβλητές, συναρτήσεις) ξεκινούν  με  underscore

(δηλαδή δεν  επιτρέπεται η πρόσβαση σε αυτά από κώδικα  εκτός  του δομοστοιχείου),

τότε με την  χρήση του from module import * διασφαλίζεται ότι θα εισαχθούν μόνο αυτά 

τα  ονόματα  που  είναι  επιθυμητό  να  είναι  προσπελάσιμα. Για  παράδειγμα  αν 

υποθέσουμε  ότι  έχουμε  ένα  αρχείο  με  όνομα  που  περιέχει  το 

παρακάτω:

Page 25: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 25/29

  25

 

Αν τώρα δώσουμε τις παρακάτω εντολές στον διερμηνευτή, θα διαπιστώσουμε ότι το 

εισήχθη  κανονικά, ενώ  το  παραμένει  κρυμμένο  εκτός  του 

.

Αυτή η συμπεριφορά συμβαίνει μόνο με την  χρήση της  import *. Για 

να έχουμε πρόσβαση σε όλα τα στοιχεία του  μπορούμε να κάνουμε τα 

παρακάτω:

2.3 Κανόνες εμβέλειας και χώροι ονομάτων 

 Όταν ένα τμήμα κώδικα εκτελείται στην Python έχει τρεις  χώρους ονομάτων, τον τοπικό 

(local), τον καθολικό (global) και τον ενσωματωμένο (built-in).  Ένας  χώρος ονομάτων 

στην  Python είναι μια αντιστοίχιση από αναγνωριστικά  ταυτότητας σε αντικείμενα  και 

συνήθως παριστάνεται ως ένα λεξικό.

 Όταν κατά  την διάρκεια  της  εκτέλεσης η  Python συναντά  ένα αναγνωριστικό, τότε  το 

αναζητά  αρχικά  στον  τοπικό   χώρο  ονομάτων. Αν  δεν  βρεθεί, το  αναζητά  στον 

ενσωματωμένο   χώρο  ονομάτων. Αν  δεν  βρεθεί  ούτε  εκεί, τότε  το  αναζητά  στον 

Page 26: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 26/29

  26

καθολικό  χώρο ονομάτων. Αν δεν υπάρχει ούτε εκεί, τότε παράγεται μια εξαίρεση τύπου 

NameError.

Ο καθολικός  χώρος ονομάτων μιας συνάρτησης είναι ο καθολικός  χώρος ονομάτων 

του  τμήματος  κώδικα  που  περιέχει  την  συνάρτηση  (δηλαδή  του  δομοστοιχείου, του 

αρχείου σεναρίων ή της διαδραστικής συνεδρίας). Είναι ανεξάρτητο από το δυναμικό 

πλαίσιο από το οποίο καλείται.

Οι  δύο  ενσωματωμένες  συναρτήσεις  locals και  globals επιστρέφουν  λεξικά  που 

περιέχουν  τις  συνδέσεις  στον  τοπικό  και  καθολικό   χώρο  ονομάτων  αντίστοιχα. Για 

παράδειγμα στη συγκεκριμένη συνεδρία έχουμε τα παρακάτω.

Σε  αυτή  τη  συνεδρία  οι   χώροι  ονομάτων  είναι  οι  ίδιοι. Περιλαμβάνουν  τρία  αρχικά 

ζευγάρια  κλειδί/ τιμή, τα  οποία  είναι  για  εσωτερική  χρήση, και στη συνέχεια  μια  κενή 

συμβολοσειρά τεκμηρίωσης  , το όνομα του κύριου δομοστοιχείου  ,

και  το  δομοστοιχείο  που   χρησιμοποιείται  για  το  ενσωματωμένο   χώρο  ονομάτων 

.

Page 27: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 27/29

  27

Διαγραφή συνδέσεων μπορεί να γίνει με την  χρήση της  εντολής del. Για παράδειγμα,

για να διαγράψουμε τη σύνδεση  εκτελούμε το παρακάτω.

Με  την  συνάρτηση  dir μπορούμε  να  έχουμε  για  ένα  δομοστοιχείο  μια  λίστα  με  τα 

ονόματα που είναι δηλωμένα σε αυτό.

Page 28: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 28/29

  28

Σύνοψη 

Με την ολοκλήρωση της ενότητας αυτής γνωρίζετε:

•  τα βασικά στοιχεία των συναρτήσεων στην Python και είσαστε σε θέση να γνωρίζετε 

πώς να γράφετε και να εκτελείτε απλά σενάρια και προγράμματα, και 

•  τα βασικά στοιχεία των δομοστοιχείων στην Python και γνωρίζετε πώς να γράφετε 

και να εκτελείτε απλά σενάρια και προγράμματα.

Page 29: 1404_book_u4

7/21/2019 1404_book_u4

http://slidepdf.com/reader/full/1404booku4 29/29

ΒΙΒΛΙΟΓΡΑΦΙΑ 

ΔΕ4

• 

Hetland, Μ., (2005), Beginning Python: From Novice to Professional, Apress, UnitedStates of America.

•  Lutz, Μ., (2013), Learning Python, Fifth Edition, O’Reilly Media, Inc., Sebastopol,

United States of America.

•  Lutz, Μ., (2011), Programming Python, Fourth Edition, O’Reilly Media, Sebastopol,

United States of America.

•  Shaw, Z., (2014), Learn Python the hard way: a very simple introduction to the

terrifyingly beautiful world of computers and code, Third edition, .Addison Wesley,

United States of America.

•  Αβούρης, Ν.,Κουκιάς, Μ., Παλιούρας, Β., Σγάρμπας  Κ., (2013), Εισαγωγή  στους 

υπολογιστές  με τη γλώσσα Python, Εκδόσεις Πανεπιστημίου Πατρών.