Η **Python** είναι διερμηνευόμενη (interpreted), γενικού σκοπού (general-purpose) και υψηλού επιπέδου, γλώσσα προγραμματισμού.

Ανήκει στις γλώσσες προστακτικού προγραμματισμού (*Imperative programming*) και υποστηρίζει τόσο το διαδικαστικό (*procedural programming*) όσο και το αντικειμενοστρεφές (*object-oriented programming*) προγραμματιστικό υπόδειγμα (*programming paradigm*). 

Είναι δυναμική γλώσσα προγραμματισμού (dynamically typed) και υποστηρίζει συλλογή απορριμμάτων (*garbage collection ή GC*).

Δημιουργήθηκε από τον Ολλανδό Γκίντο βαν Ρόσσουμ (Guido van Rossum) στο ερευνητικό κέντρο Centrum Wiskunde & Informatica (CWI) το 1989 και κυκλοφόρησε για πρώτη φορά το 1991.

Ο κύριος στόχος της είναι η αναγνωσιμότητα του κώδικά της και η ευκολία χρήσης της. Το συντακτικό της επιτρέπει στους προγραμματιστές να εκφράσουν έννοιες σε λιγότερες γραμμές κώδικα από ό,τι θα ήταν δυνατόν σε γλώσσες όπως η C++ ή η Java. Διακρίνεται λόγω του ότι έχει πολλές βιβλιοθήκες που διευκολύνουν ιδιαίτερα αρκετές συνηθισμένες εργασίες και για την ταχύτητα εκμάθησης της. Μειονεκτεί στο ότι επειδή είναι διερμηνευόμενη είναι πιο αργή από τις μεταγλωττιζόμενες (compiled) γλώσσες όπως η C και η C++. Για αυτόν τον λόγο δεν είναι κατάλληλη για γραφή λειτουργικών συστημάτων.

Οι διερμηνευτές της Python είναι διαθέσιμοι για εγκατάσταση σε πολλά λειτουργικά συστήματα, επιτρέποντας στην Python την εκτέλεση κώδικα σε ευρεία γκάμα συστημάτων. Χρησιμοποιώντας εργαλεία τρίτων, όπως το Py2exe ή το Pyinstaller, ο κώδικας της Python μπορεί να πακεταριστεί σε αυτόνομα εκτελέσιμα προγράμματα για μερικά από τα πιο δημοφιλή λειτουργικά συστήματα, επιτρέποντας τη διανομή του βασισμένου σε Python λογισμικού για χρήση σε αυτά τα περιβάλλοντα χωρίς να απαιτείται εγκατάσταση του διερμηνευτή της Python.

Η Python αναπτύσσεται ως ανοιχτό λογισμικό (open source) και η διαχείρισή της γίνεται από τον μη κερδοσκοπικό οργανισμό Python Software Foundation. Ο κώδικας διανέμεται με την άδεια Python Software Foundation License η οποία είναι συμβατή με την GPL. Το όνομα της γλώσσας προέρχεται από την ομάδα των Άγγλων κωμικών Μόντυ Πάιθον και δεν έχει καμιά σχέση με το φίδι πύθωνα, παρότι το λογότυπό της παραπέμπει σε κάτι τέτοιο.

Ιστορικό
--------

Η Python δημιουργήθηκε από τον Γκίντο βαν Ρόσσουμ στο ερευνητικό κέντρο Centrum Wiskunde & Informatica (CWI) το 1989. Αρχικά, η Python ήταν γλώσσα σεναρίων που χρησιμοποιήθηκε στο κατανεμημένο λειτουργικό σύστημα Amoeba, ικανή και για κλήσεις συστήματος. Θεωρείται διάδοχος της γλώσσας προγραμματισμού ABC, μια και αυτή υπήρξε η βασική πηγή έμπνευσης για τον Γκίντο βαν Ρόσσουμ.

Η Python 2.0 κυκλοφόρησε στις 16 Οκτωβρίου του 2000. Στις 3 Δεκεμβρίου 2008 κυκλοφόρησε η έκδοση 3.0 (γνωστή και ως py3k ή python 3000). Πολλά από τα καινούργια χαρακτηριστικά αυτής της έκδοσης έχουν μεταφερθεί στις εκδόσεις 2.6 και 2.7 που είναι προς τα πίσω συμβατές.

Η Python 3.0 είναι ιστορικά η πρώτη γλώσσα προγραμματισμού που σπάει την προς τα πίσω συμβατότητα με προηγούμενες εκδόσεις ώστε να διορθωθούν κάποια λάθη που υπήρχαν σε προγενέστερες εκδόσεις και να καταστεί ακόμα πιο σαφής ο απλός τρόπος με τον οποίο μπορούν να γίνουν κάποια πράγματα.

Η Python 3.0 συνοδεύεται με το πρόγραμμα 2to3.py, που επιτρέπει την μετατροπή κώδικα της έκδοσης 2.0 σε 3.0.

Ο *Γκίντο βαν Ρόσσουμ*, πρωτοστατούσε στην κοινότητα της Python μέχρι τον Ιούλιο του 2018, οπότε και παραιτήθηκε, για να συνεχίσει μόνο ως μέλος του Διοικητικού Συμβουλίου.

Η πιο πρόσφατη έκδοση είναι η 3.12 και δημοσιεύτηκε στις 2 Οκτωμβριου 2003

Διερμηνευτής
------------

Για να εκτελεστούν διαδραστικά (interactively) μεμονωμένες εντολές ή προγράμματα είναι απαραίτητη η εγκατάσταση του διερμηνευτή της Python, ο οποίος είναι ελεύθερα διαθέσιμος για «κατέβασμα» (download) από τον επίσημο ιστότοπό της (www.python.org). Για Microsoft Windows υπάρχουν εκδόσεις των 32 ή 64 bits. Στα λειτουργικά συστήματα Linux και Mac OS X συνηθίζεται να είναι προεγκατεστημένη, πιθανότατα όμως να είναι μια παλαιότερη έκδοσή της.

IDLE
----

Κύριο λήμμα: IDLE (Python)
Για τη συγγραφή προγραμμάτων είναι απαραίτητος ένας κειμενογράφος ή ακόμα καλύτερα ένα ολοκληρωμένο περιβάλλον ανάπτυξης (Integrated Development Environment - IDE), το οποίο είναι ένα ειδικό λογισμικό για την ανάπτυξη εφαρμογών. Η Python έρχεται μαζί με ένα εύχρηστο και απλό περιβάλλον ανάπτυξης με την ονομασία ΙDLE. Τα αρχικά του προέρχονται από τις λέξεις Interactive DeveLopment Environment και είναι γραμμένο σε Python από τον *Γκίντο βαν Ρόσσουμ*. Χρησιμοποιεί τη βιβλιοθήκη γραφικών Tkinter, οπότε μπορεί να εκτελεσθεί σε περιβάλλον Linux, Windows και Mac OS X. Το IDLE μας δίνει τη δυνατότητα να χρησιμοποιήσουμε διαδραστικά τον διερμηνευτή της γλώσσας, να γράψουμε και να επεξεργαστούμε προγράμματα, να τα αποθηκεύσουμε σε αρχεία, να τα εκτελέσουμε, να κάνουμε αποσφαλμάτωση (debugging).

Δομή και σύνταξη
----------------

Η γλώσσα χρησιμοποιεί μεταγλωττιστή (compiler) για την δημιουργία του εκτελέσιμου κώδικα και σχετίζεται με τις γλώσσες προγραμματισμού Tcl, Perl, Scheme, Java και Ruby, καθώς και με την ABC η οποία υπήρξε η αρχική πηγή έμπνευσης για τη δημιουργία της.

### Ονοματοδοσία μεταβλητών

Τα ονόματα που λαμβάνουν οι μεταβλητές υπόκεινται στους εξής κανόνες:

* Είναι λέξεις που αποτελούνται από αλφαριθμητικούς χαρακτήρες (γράμματα και αριθμούς) και την κάτω παύλα (*underscore*, "\_"). Μπορεί να αρχίζει με αλφαβητικό χαρακτήρα ή κάτω παύλα (\_).
* Δεν επιτρέπεται να αρχίζει με αριθμό (π.χ. *var4\_1* είναι σωστό, αλλά το *4var\_1* είναι λάθος).
* Υπάρχει διάκριση πεζών και κεφαλαίων γραμμάτων (case sensitivity), οπότε και οι μεταβλητές διαφοροποιούνται λόγω πεζών ή κεφαλαίων (π.χ. άλλη η μεταβλητή *Var* και άλλη η *var*).
* Δεν επιτρέπονται δεσμευμένες λέξεις (λέξεις-κλειδιά, *keywords*), δηλαδή λέξεις με ιδιαίτερη σημασία (*idetifiers*), όπως `print, type, False, float, None,` κλπ. Η Python έχει 33 λέξεις-κλειδιά.
* Μπορούν να χρησιμοποιηθούν και ελληνικά ή άλλης γλώσσας γράμματα, αλλά δεν συνίσταται γιατί δημιουργείται δυσανάγνωστος κώδικας.

### Τύποι δεδομένων

Οι τύποι δεδομένων της Python διακρίνονται στους αρχέγονους (*primitive data type*), στις πιο σύνθετες δομές δεδομένων (λίστες, πλειάδες, σύνολα, λεξικά) και, λόγω των αντικειμενοστρεφών δυνατοτήτων της, στις κλάσεις (*classes*). Λόγω του ότι η Python είναι δυναμική γλώσσα δεν δηλώνονται οι τύποι των μεταβλητών πριν χρησιμοποιηθούν. Ο τύπος που τους αποδίδεται εξαρτάται από την τιμή που θα πάρουν κατά την διάρκεια της εκτέλεσης του προγράμματος. Όταν χρησιμοποιηθεί (π.χ. σε έκφραση ή συνάρτηση) πρέπει να έχει πάρει τιμή γιατί ο διερμηνευτής (interpreter) δίνει λάθος που το ονομάζει `NameError`. Για αυτόν τον λόγο η Python υποστηρίζει τον ιδιαίτερο τύπο `NoneType` (βλ. παρακάτω).

#### Αρχέγονοι (primitive) τύποι δεδομένων

Οι *αρχέγονοι τύποι* είναι:

* `int` (ακέραιος). Στην Python οι ακέραιοι μπορούν να είναι οσοδήποτε μεγάλοι.
* `float` (κινητής υποδιαστολής)
* `str`(συμβολοσειρά ή string). Είναι ακολουθία χαρακτήρων που περικλείονται από μονά ή διπλά εισαγωγικά. Σε ειδικές περιπτώσεις μπορεί να γίνει χρήση τριπλών εισαγωγικών (μονών :''' ή διπλών: """).
* `bool`. Ο λογικός τύπος (Boolean) μεταβλητής με τιμές `True` ή `False`.
* `NoneType`. Αυτός ο τύπος μεταβλητής παίρνει την τιμή `None` με ανάθεση (assignment, `= None`) και αντιμετωπίζεται, στον σχεδιασμό του προγράμματος, σαν μεταβλητή που δεν έχει τιμή. `None` επιστρέφουν και οι συναρτήσεις που δεν επιστρέφουν τιμή (δεν έχουν `return <έκφραση>`), όπως για παράδειγμα η `print()`.

Δεν έχει μεταβλητή τύπου Character (όπως για παράδειγμα η C/C++). Σε αυτή την περίπτωση χρησιμοποιείται η μεταβλητή String με ένα χαρακτήρα.

Η συνάρτηση `type()` μας επιστρέφει τον τύπο της μεταβλητής. Αν η μεταβλητή δεν έχει πάρει τιμή μας επιστρέφει `NoneType`.

#### Ενσωματωμένες δομές δεδομένων

Οι ενσωματωμένες δομές δεδομένων στην Python είναι η Λίστα (List), η Πλειάδα (Tuple), τo Σύνολo (Set) και το Λεξικό (Dictionary).

##### Λίστα (list)

Η *λίστα* υλοποιεί τον γνωστό αφηρημένο τύπο δεδομένων. Μοιάζει με την δομή του πίνακα (array), αλλά σε αντίθεση με αυτόν μπορεί να περιέχει ανομοιογενή αντικείμενα (items) ή αλλιώς στοιχεία (elements), τα οποία μπορεί να είναι οποιαδήποτε δομή δεδομένων (ακόμα και λίστα). Όπως στους πίνακες τα στοιχεία είναι διατεταγμένα σε συγκεκριμένη σειρά, προσπελάσιμα με δείκτες και επιτρέπεται η επανάληψη τους. Ορίζεται με ένα ζευγάρι *τετραγωνισμένων αγκύλων* `[]` και με τα στοιχεία να χωρίζονται μεταξύ τους με κόμμα, π.χ. η ακολουθία `[ <στοιχείο1>, ... <στοιχείοΝ> ]` ορίζει μια λίστα Ν στοιχείων. Μπορεί να οριστεί μια κενή λίστα μόνο με τις αγκύλες και χωρίς περιεχόμενο.

Επειδή η συμβολοσειρά (string) αποτελεί μια διατεταγμένη ακολουθία χαρακτήρων μοιάζει με λίστα και χρησιμοποιεί παρόμοιους τελεστές (operators) και συναρτήσεις (methods). Η μεγάλη διαφορά τους είναι ότι η λίστα είναι δυναμικός ή αλλιώς μεταβλητός (mutable) τύπος δεδομένων, ενώ η συμβολοσειρά στατικός ή αλλιώς αμετάβλητος (immutable) τύπος δεδομένων. Στη λίστα μπορούμε να αλλάξουμε τα στοιχεία που περιέχει. Στη συμβολοσειρά η αλλαγή των χαρακτήρων που περιέχει γίνεται μόνο με αντικατάσταση (overwriting) μέσω ανάθεσης (assignment) από νέα συμβολοσειρά.

##### Πλειάδα (tuple)

Η *πλειάδα* υλοποιεί την αντίστοιχη μαθηματική έννοια της πλειάδας. Είναι μια πεπερασμένη ακολουθία στοιχείων διατεταγμένων σε συγκεκριμένη σειρά και μοιάζει πολύ με την *λίστα* (list). Ορίζεται με ένα ζευγάρι *παρενθέσεων* `()` και με τα στοιχεία να χωρίζονται μεταξύ τους με κόμμα, π.χ. η ακολουθία `( <στοιχείο1>, ... <στοιχείοΝ> )` ορίζει μια πλειάδα Ν στοιχείων. Αν το επιτρέπουν τα συμφραζόμενα μπορούν να παραληφθούν οι παρενθέσεις. Διαφέρει από την δομή της λίστας στο ότι η πλειάδα είναι στατική ή αλλιώς αμετάβλητη (immutable) δομή δεδομένων. Αφού δημιουργηθεί δεν μπορεί να μεταβληθεί. Η χρήση της πλειάδας είναι προτιμότερη από της λίστας όταν δεν χρειάζεται να αλλάξουμε τα στοιχεία της γιατί θεωρητικά είναι αποτελεσματικότερη σε ταχύτητα στις διάφορες λειτουργίες της. Η πλειάδα που περιέχει ένα στοιχείο ορίζεται πάντα με ένα κόμμα μετά το στοιχείο, π.χ. `( <στοιχείο>**,** )`, διότι οι παρενθέσεις χρησιμοποιούνται και στην ομαδοποίηση των εκφράσεων (expressions) και η γραφή χωρίς κόμμα, π.χ. `= ( <στοιχείο> )` λαμβάνεται από τον διερμηνευτής (interpreter) ως ανάθεση (assignment), δηλαδή `= <στοιχείο>`.

##### Λεξικό (dictionary)

To *λεξικό* (dictionary) είναι μια δομή δεδομένων για την αποθήκευση ζευγαριών τιμών της μορφής *κλειδί* : *τιμή* (key : value). Ορίζεται με ένα ζευγάρι αγκύλων `{}` και με τα ζευγάρια να χωρίζονται μεταξύ τους με κόμμα, π.χ. η ακολουθία `{ κλειδί1 : τιμή1, ... κλειδίΝ : τιμήΝ }` ορίζει ένα λεξικό Ν ζευγαριών. Ανάμεσα στο *κλειδί* και την *τιμή* υπάρχει η άνω-κάτω τελεία (`:`). Τα *κλειδιά* πρέπει να είναι μοναδικά γιατί χρησιμεύουν στην προσπέλαση της αντίστοιχης *τιμής*. Τα κλειδιά πρέπει να είναι στατικοί ή αλλιώς αμετάβλητοι (immutable) τύποι δεδομένων, όπως ακέραιοι αριθμοί, συμβολοσειρές, αμετάβλητες πλειάδες (όταν όλα τα στοιχεία της πλειάδας είναι αμετάβλητα).

### Ανάθεση τιμών (assignment)

Επειδή η Python είναι δυναμική γλώσσα προγραμματισμού (*dynamically typed*) διαφέρει από τις άλλες παραδοσιακές γλώσσες προστακτικού προγραμματισμού (*Imperative programming*) στον τρόπο που γίνεται η ανάθεση τιμών στις μεταβλητές της. Συνήθως οι μεταβλητές δηλώνονται πριν τους ανατεθούν τιμές και μαζί δηλώνεται και ο τύπος τους (interer, floating point, character, κλπ.). Στην Python οι μεταβλητές δηλώνονται μαζί με την ανάθεση των τιμών σε αυτές (ακόμα και όταν τους δοθεί η τιμή `None`) και δεν είναι δεσμευμένες σε κάποιο συγκεκριμένο τύπο δεδομένων. Μία μεταβλητή μπορεί να είναι ακεραία (*integer*) και η ίδια στη συνέχεια να γίνει συμβολοσειρά (*string*) αν της ανατεθεί τιμή συμβολοσειράς.

Στην Python, όταν κατά την εκτέλεση ενός προγράμματος, αναθέτουμε τιμή σε μια μεταβλητή `x`, π.χ. `x = 2`, η τιμή 2 αντιγράφεται σε χώρο μνήμης πού δεσμεύεται (*memory allocation*), μαζί με άλλες ιδιότητες, όπως π.χ. ότι ο τύπος της είναι ακέραιος (integer). Στην μεταβλητή x αποδίδεται η διεύθυνση (*memory address*) αυτής της θέσης στην μνήμη. Η μεταβλητή λειτουργεί σαν δείκτης (*pointer*). Η ίδια η μεταβλητή δεν έχει κάποια τιμή ή τύπο δεδομένων, αλλά έχει τη θέση της μνήμης που «αντιπροσωπεύει». Σε ένα πρόγραμμα μετά την ανάθεση `x = 2` (η μεταβλητή είναι τύπου integer), στην συνέχεια της εκτέλεσης μπορεί να εκτελεστεί η ανάθεση `x = "hellow world"`, οπότε η μεταβλητή «αντιπροσωπεύει» την συμβολοσειρά "hellow world" (είναι τύπου string). Στην δεύτερη ανάθεση η τιμή 2 δεν «αντιπροσωπεύεται» από κάποια μεταβλητή (δεν χρειάζεται πλέον στο πρόγραμμα) και ο συλλέκτης απορριμμάτων (*garbage collector*), της Python, αναλαμβάνει «αυτόματα» να αποδεσμεύσει (*memory de-allocation*) τον χώρο της μνήμης που αυτή κατέχει.

### Εσοχές (indentation)

Η στοίχιση στα αριστερά ή αλλιώς οι αριστερές εσοχές (*indentation*) έχουν μεγάλη σημασία γιατί ορίζουν τα block (ομαδοποίηση) του κώδικα. Αυτό σε άλλες γλώσσες, όπως C και Java επιτυγχάνεται με την χρήση των αγκύλων `{ }`. Στην Python το block κώδικα αρχίζει εκεί που η αριστερή εσοχή αυξάνεται προς τα δεξιά και τελειώνει εκεί που καταργείται η εσοχή. Εσοχή μέσα σε εσοχή σημαίνει block μέσα σε block (*nested blocks*). Η εσοχή μπορεί να είναι οσοδήποτε μεγάλη ή μικρή - του ίδιου πάντα μεγέθους - αλλά συνίσταται η χρήση 4 κενών χαρακτήρων (spacebars) για ευκολότερη αναγνωσιμότητα του κώδικα.

Για παράδειγμα μια εμφωλιασμένη εντολή `if` ορίζεται ως εξής:

```
if <λογική έκφραση1> :
    εντολή1
    εντολή2
    if <λογική έκφραση2> :
        εντολή3
        εντολή4
    ενολή5
εντολή6

```
Το block της πρώτης `if` περιέχει τις εντολή1, εντολή2, την δεύτερη `if` και τελειώνει με την εντολή5. Η εντολή6 είναι εκτός block (δεν ανήκει στην εξωτερική `if`). Η εσωτερική `if` (εμφωλιασμένη) με την δική της εσοχή ορίζει ένα block (που περιέχει την εντολή3 και εντολή4) μέσα στο block της εξωτερικής `if`.

### Τελεστές

#### Τελεστές πράξεων

Υποστηρίζει τους γνωστούς, με τις άλλες γλώσσες προγραμματισμού, τελεστές (*operators*), όπως τους `+`, `-`, `*`, `/`,`**`, `%`, που όμως έχουν κάποιες διαφοροποιήσεις ανάλογα με τους τελεστέους (*operands*), δηλαδή τον τύπο των μεταβλητών, όπου εφαρμόζονται (πολυμορφισμός).

Ο τελεστής της πρόσθεσης `+` όταν οι τελεστέοι είναι Strings εκτελεί την πράξη της συνένωσης (*concatenation*) και ο πολλαπλασιασμός `*` την πράξη της αναπαραγωγής (*replication*) του String όταν αυτό πολλαπλασιάζεται με ακέραιο (*integer*). Δηλαδή η έκφραση (*expression*): `"abc" + "def"` έχει ως αποτέλεσμα `"abcdef"` και η `"abc" * 3` ή `3 * "abc"` έχει ως αποτέλεσμα `"abcabcabc"` αντίστοιχα.

#### Τελεστές λογικής

Υποστηρίζει τους λογικούς τελεστές `and`, `or` και `not` για μεταβλητές τύπου Boolean. Τα εμφωλιασμένα (*nested*) `not` αποδίδονται ως διπλή άρνηση (άρνηση στην άρνηση). Η σειρά (προτεραιότητα) εκτέλεσης είναι `not, and, or`.

### Εμβέλεια ονομάτων οντοτήτων (scope)

Στις οντότητες ή αντικείμενα (μεταβλητές, συναρτήσεις, κλάσεις, κλπ.), που δημιουργούνται σε ένα πρόγραμμα, για να μπορούν να χρησιμοποιηθούν (προσπελαστούν), αποδίδονται ονόματα (name binding). Για παράδειγμα στην Python μια οντότητα, όπως είναι μια μεταβλητή, δεν δηλώνεται, αλλά *δημιουργείται* και *ονοματίζεται* όταν της γίνει ανάθεση (assignment) κάποιας τιμής. Οντότητες που *δημιουργούνται* μέσα σε ένα block κώδικα, όπως το σώμα μιας συνάρτησης, μιας εντολής `if` ή `for`, κλπ. έχουν περιορισμένη εμβέλεια και μπορούν να χρησιμοποιηθούν μόνο μέσα στο block που έχουν ονομαστεί. Ένα τέτοιο όνομα δεν είναι προσπελάσιμο εκτός του block ακόμα και αν έχει την ίδια ονομασία και λέγεται ότι είναι *τοπικής εμβέλειας* (*local scope*). Ένα όνομα που δηλώνεται στο κύριο σώμα (block) του προγράμματος μπορεί να προσπελαστεί σε ολόκληρο το πρόγραμμα, ακόμα και στα block που έχουν οριστεί μέσα στο πρόγραμμα και λέγεται ότι είναι *καθολικής εμβέλειας* (*global scope*).

Μέσα σε ένα block ο διερμηνευτής (interpreter) χρησιμοποιεί την τοπική ονομασία μιας οντότητας ακόμα και αν υπάρχει άλλη με την ίδια ονομασία και καθολική εμβέλεια. Συγκεκριμένα ο διερμηνευτής όταν συναντήσει ένα όνομα (π.χ. μεταβλητής) μέσα σε ένα block ελέγχει πρώτα αν έχει δημιουργηθεί αυτό το όνομα μέσα στο block (οπότε είναι τοπικής εμβέλειας) και το χρησιμοποιεί, έστω και αν υπάρχει ίδια ονομασία εκτός του block (καθολικής εμβέλειας). Αν δεν το βρει μέσα στο block τότε και μόνο τότε ελέγχει αν υπάρχει τέτοια ονομασία που να έχει δημιουργηθεί στο κύριο μέρος του προγράμματος (είναι καθολικής εμβέλειας) και χρησιμοποιεί αυτήν. Δηλαδή μια καθολικής εμβέλειας μεταβλητή χρησιμοποιείται μέσα σε ένα block, μόνο αν δεν υπάρχει τοπικής εμβέλειας μεταβλητή με το ίδιο όνομα, μέσα στο block.

#### Δήλωση global

Όταν μέσα σε ένα block γίνει η ανάθεση `num = 123`, τότε δημιουργείται (αναγκαστικά) η τοπικής εμβέλειας μεταβλητή `num` ακόμα και αν υπάρχει καθολικής εμβέλειας `num`. Στην περίπτωση που δεν είναι επιθυμητό να δημιουργηθεί η τοπική `num`, αλλά η τιμή `123` να ανατεθεί στην καθολική `num` γίνεται χρήση της δήλωσης `global`. Δηλώνοντας `global num`, πριν από την `num = 123`, ο διερμηνευτής δεν δημιουργεί τοπική `num`, αλλά δίνει την τιμή `123`, στην καθολική που ήδη υπάρχει.

### Παράδειγμα προγράμματος

Ένα από τα πιο απλά προγράμματα στην γλώσσα Python είναι η εμφάνιση ενός γραπτού αποτελέσματος (π.χ. Hello, world!):

```
>>> print("Hello, world!")
Hello, world!
```

Ένα ιδιαίτερο χαρακτηριστικό της γλώσσας είναι η χρήση κενών διαστημάτων σαν εσοχές (whitespace) για τον διαχωρισμό των συντακτικών δομών (block of code) του προγράμματος, σε αντίθεση με την πρακτική σε άλλες γλώσσες όπου για τον ίδιο σκοπό χρησιμοποιούνται ειδικά σύμβολα (π.χ. αγκύλες). Αυτό, σε συνδυασμό με το ότι χρησιμοποιεί πλήρεις αγγλικές λέξεις στη θέση συμβόλων, καθιστούν τον κώδικα της Python ευανάγνωστο από όσους έχουν βασική γνώση των αγγλικών.

```
age = 21
if age >= 18:
    print("You vote")
else:
    print("You don't vote")

```

### Διαδικαστικός προγραμματισμός

Για παράδειγμα, ο παρακάτω γεννήτορας (generator) generate\_primes παράγει πρώτους αριθμούς:

```
from itertools import count
def generate\_primes(stop\_at=None):
  primes = []
  for n in count(2):
    if stop\_at is not None and n > stop\_at:
      return
    composite = False
    for p in primes:
      if not n % p:
        composite = True
        break
      elif p\*\*2 > n: 
        break
    if not composite:
      primes.append(n)
      yield n

```

Και για να καλέσουμε τη συνάρτηση, υπολογίζοντας τους πρώτους αριθμούς από το 1 στο 100:

```
for i in generate\_primes(): 
  if i > 100: break
  print(i)

```

### Αντικειμενοστρεφής προγραμματισμός

Παράδειγμα αντικειμενοστρεφούς προγράμματος γραμμένο σε Python, το οποίο παρουσιάζει μια κλάση Υπάλληλος:

```
class Employee:
    def \_\_init\_\_(self, id, name, position):
        self.id = id;
        self.name = name;
        self.position = position;
    def printEmployee(self):
        print(self.id, "|", self.name, "|", self.position);

e1 = Employee(1230, "Νικόλαος Παπαγεωργού", "Βοηθός Προγραμματιστή");
e1.printEmployee();

```

Εκπαίδευση
----------

Η Python ενδείκνυται ως γλώσσα εισαγωγική στον προγραμματισμό και στην επιστήμη των υπολογιστών γενικότερα, με δεδομένη την απλότητα στη σύνταξή της. Διεθνώς πολλά πανεπιστήμια αλλά και η δευτεροβάθμια εκπαίδευση σε πολλές χώρες, υιοθετούν μια python first προσέγγιση εισαγωγής στον προγραμματισμό. Στη δευτεροβάθμια εκπαίδευση της χώρας μας το πρώτο βήμα έγινε με τα Επαγγελματικά Λύκεια στα οποία έχει εισαχθεί στο σχετικό μάθημα (πηγή: Αράπογλου, κ.α.2017).

Επίσης, η Python χρησιμοποιείται ως εργαλείο για εισαγωγή σε βασικές έννοιες των υπολογιστών, (βλέπε για παράδειγμα: Avouris et al. 2017), ενώ η Python έχει υποστηρίξει με επιτυχία οικοδομιστικές προσεγγίσεις στη μάθηση, σε επί μέρους αντικείμενα, όπως σε media studies (βλέπε Guzdial, 2004). Άλλες προτεινόμενες προσεγγίσεις είναι η χρήση της Python για διαχείριση δεδομένων, για μελέτες σε ανθρωπιστικές σπουδές, για γεωγραφικά συστήματα πληροφοριών, κλπ.

Υπάρχει διαθέσιμο πλούσιο υλικό και στην Ελληνική γλώσσα, πέραν της διεθνούς βιβλιογραφίας και πηγών. Για παράδειγμα στις ιστοσελίδες διαδικτυακών μαθημάτων mathesis.cup.gr και coursity.gr υπάρχουν διαδικτυακά μαθήματα εισαγωγής στον προγραμματισμό με Python, το περιεχόμενο των οποίων διατίθεται ελεύθερα. Στο mathesis.cup.gr υπάρχει μάθημα προχωρημένου προγραμματισμού με Python.

Επίσης οργανώνονται από σύμπραξη Ελληνικών Πανεπιστημίων και την υποστήριξη της ΕΛΛΑΚ θερινά σχολεία στην Python.

Παραπομπές
----------

1. ↑  «Python 3.12.3 and 3.13.0a6 released» (στα Αγγλικά). 9 Απριλίου 2024. Ανακτήθηκε στις 9 Απριλίου 2024.
2. ↑  «History and License - Python documentation». Ανακτήθηκε στις 19 Αύγουστος 2016.
3. ↑  «Programming Language Trends - O'Reilly Radar». Radar.oreilly.com. 2 Αυγούστου 2006. Ανακτήθηκε στις 17 Ιουλίου 2013.
4. ↑  «The RedMonk Programming Language Rankings: January 2013 – tecosystems». Redmonk.com. 28 Φεβρουαρίου 2013. Ανακτήθηκε στις 17 Ιουλίου 2013.
5. 1 2  Αγγελιδάκης, Ν. βλ. πηγές σελ. 5 (σελ. 14 του pdf)
6. 1 2 3 4 5 6  Αγγελιδάκης, Ν. βλ. πηγές σελ. 7 (σελ. 16 του pdf)
7. ↑  (Αγγλικά) «The Making of Python: A Conversation with Guido van Rossum, Part I by Bill Venners» στο artima.com. Δημοσιεύθηκε 13/01/2003. Αρχειοθετήθηκε 19/02/2019. Ανακτήθηκε 27/04/2019.
8. ↑  Summerfield, Mark. *Rapid GUI Programming with Python and Qt*. Python is a very expressive language, which means that we can usually write far fewer lines of Python code than would be required for an equivalent application written in, say, C++ or Java
9. ↑  McConnell, Steve (30 Νοεμβρίου 2009). *Code Complete, p. 100*. ISBN 9780735636972.
10. 1 2  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 6 (σελ. 15 του pdf)
11. ↑  «PyInstaller Home Page». Αρχειοθετήθηκε από το πρωτότυπο στις 8 Ιουλίου 2014. Ανακτήθηκε στις 27 Ιανουαρίου 2014.
12. ↑  Αγγελιδάκης, Ν. βλ. πηγές σελ. 7 (σελ. 16 του pdf)
13. ↑  (Αγγλικά) «History of Python» από python-course.eu. Αρχειοθετήθηκε 29/08/2017. Ανακτήθηκε 27/04/2019.
14. ↑  «2to3 - Automated Python 2 to 3 code translation — Python 3.7.4 documentation». *docs.python.org* (στα Αγγλικά). Ανακτήθηκε στις 14 Σεπτεμβρίου 2019.
15. ↑  (Αγγλικά) «Python 2to3 windows CMD» στο stackoverflow.com. Ανακτήθηκε 2019-09-14.
16. ↑  (Αγγλικά) Carlie Fairchild. «Guido van Rossum Stepping Down from Role as Python's Benevolent Dictator For Life» στο www.linuxjournal.com. Δημοσιεύθηκε 12/07/2018. Αρχειοθετήθηκε 27/03/2019. Ανακτήθηκε 15/04/2019.
17. ↑  (Αγγλικά) «Python boss Guido van Rossum steps down after 30 years» στο www.theinquirer.net. Αρχειοθετήθηκε 19/02//2019. Ανακτήθηκε 15/04/2019.
18. ↑  Αγγελιδάκης, Ν. βλ. πηγές σελ. 11 (σελ. 20 του pdf)
19. ↑  Αγγελιδάκης, Ν. βλ. πηγές σελ. 13 (σελ. 22 του pdf)
20. 1 2 3  «Μαθήματα Προγραμματισμού Python. Μάθημα 2ο» του Γιάννη Φυτίλη στο pcsteps.gr. Δημοσιεύθηκε 27/09/2017. Αρχειοθετήθηκε 23/04/2019. Ανακτήθηκε 23/04/2019.
21. 1 2 3 4 5  Μιχάλης Πλεξουσάκης, 2016. «Γλώσσα προγραμματισμού python3 - Μεταβλητές - Ονόματα μεταβλητών - Λέξεις κλειδιά» από users.tem.uoc.gr. Αρχειοθετήθηκε 20/04/2019. Ανακτήθηκε 23/04/2019.
22. 1 2 3  Αγγελιδάκης, Ν. βλ. πηγές, Κεφάλαιο 3, σελ. 17-23 (σελ. 26-32 του pdf)
23. ↑  Αγγελιδάκης, Ν. βλ. πηγές σελ. 22 (σελ. 31 του pdf)
24. ↑  Αγγελιδάκης, Ν. βλ. πηγές σελ. 21 (σελ. 30 του pdf)
25. ↑  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 27 (σελ. 36 του pdf)
26. 1 2 3  «Μαθήματα Προγραμματισμού Python. Μάθημα 3ο» του Γιάννη Φυτίλη στο pcsteps.gr. Δημοσιεύθηκε 04/10/2017. Αρχειοθετήθηκε 23/04/2019. Ανακτήθηκε 23/04/2019.
27. ↑  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 34-37 (σελ. 43-46 του pdf)
28. ↑  «Μαθήματα Προγραμματισμού Python. Μάθημα 4ο» του Γιάννη Φυτίλη στο pcsteps.gr. Δημοσιεύθηκε 11/10/2017. Αρχειοθετήθηκε 24/04/2019. Ανακτήθηκε 23/04/2019.
29. ↑  Αράπογλου, Βραχνός, κλπ, βλ. πηγές, σελ. 32 (σελ. 33 του pdf)
30. ↑  «Μαθήματα Προγραμματισμού Python. Μάθημα 6ο» του Γιάννη Φυτίλη στο pcsteps.gr. Δημοσιεύθηκε 25/10/2017. Αρχειοθετήθηκε 25/04/2019. Ανακτήθηκε 23/04/2019.
31. 1 2  «Μαθήματα Προγραμματισμού Python. Μάθημα 7ο» του Γιάννη Φυτίλη στο pcsteps.gr. Δημοσιεύθηκε 01/11/2017. Αρχειοθετήθηκε 25/04/2019. Ανακτήθηκε 23/04/2019.
32. ↑  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 86-98 (σελ. 95-107 του pdf)
33. ↑  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 103-106 (σελ. 112-115 του pdf)
34. 1 2  Αράπογλου, Βραχνός, κλπ, βλ. πηγές, σελ. 36-38 (σελ. 37-39 του pdf)
35. ↑  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 22 (σελ. 31 του pdf)
36. ↑  Μιχάλης Πλεξουσάκης, 2016. «Γλώσσα προγραμματισμού python3 - Λογικές εκφράσεις και μεταβλητές» από users.tem.uoc.gr. Αρχειοθετήθηκε 30/03/2018. Ανακτήθηκε 23/04/2019.
37. 1 2  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 38 (σελ. 47 του pdf)
38. ↑  (Αγγλικά) Συνίσταται η χρήση 4 κενών στις εσοχές. «PEP 8 -- Style Guide for Python Code -> Indentation» από python.org. Δημοσιεύθηκε 05/07/2001. Αρχειοθετήθηκε 17/04/2019. Ανακτήθηκε 22/04/2019.
39. ↑  Αράπογλου, Βραχνός, κλπ. βλ. πηγές, σελ. 33 (σελ. 34 του pdf)
40. 1 2 3  «Μαθήματα Προγραμματισμού Python. Μάθημα 5ο», του Γιάννη Φυτίλη στο pcsteps.gr. Δημοσιεύθηκε 18/10/2017. Αρχειοθετήθηκε 25/04/2019. Ανακτήθηκε 23/04/2019.
41. 1 2  Αγγελιδάκης, Ν. βλ. πηγές, σελ. 58-60 (σελ. 67-69 του pdf)
42. ↑  Αναστάσιος Χατζηπαπαδόπουλος, Δρ. Βασίλης Σ. Μπελεσιώτης, 2018. «Πέτρα-Ψαλίδι-Χαρτί. Από το Δομημένο στον Αντικειμενοστρεφή προγραμματισμό Αρχειοθετήθηκε 2019-04-12 στο Wayback Machine.», Τμήμα Πληροφορικής, Ιόνιο Πανεπιστήμιο Αρχειοθετήθηκε 2019-01-29 στο Wayback Machine. σελ. 14 (σελ. 2 του pdf). Αρχειοθετήθηκε 12/04/2019. Ανακτήθηκε 12/04/2019.
43. ↑  Avouris, Nikolaos; Sgarbas, Kyriakos; Paliouras, Vassilis; Koukias, Michalis (2017-04). «Work in progress: An introduction to computing course using a Python-based experiential approach». *2017 IEEE Global Engineering Education Conference (EDUCON)* (IEEE). doi:10.1109/educon.2017.7943071. ISBN 9781509054671. .

Πηγές
-----

* Αγγελιδάκης, Νικόλαος Α. Εκπαιδευτικός Πληροφορικής, Μ.Δ.Ε. (M.Sc.) στην Επιστήμη Υπολογιστών (Ηράκλειο, Αύγουστος 2015). "Εισαγωγή στον προγραμματισμό με την Python". Αρχειοθετήθηκε 12/06/2018 Ανακτήθηκε 07/04/2019. (ISBN 978-960-93-7364-7). Ηλεκτρονικό βιβλίο 150 σελίδων, για αρχάριους και με άδεια: CC BY-SA 4.0.
* Αράπογλου Α.Βραχνός Ε.Λέκκα Δ.Κανίδης Ε.Μακρυγιάννης Π. Μπελεσιώτης Β. Τζήμας Δ. Παπαδάκης Σπ. «Προγραμματισμός Υπολογιστών Γ΄ Τάξη ΕΠΑ.Λ.» με χρήση *Python 2*, Διδακτικό Υλικό, Εκδόσεις Διόφαντος. (ISBN 978-960-06-5309-0). Αρχειοθετήθηκε 14/09/2019.
* (Αγγλικά) Dave Kuhlman, (December 15, 2013). «A Python Book: Beginning Python, AdvancedPython, and Python Exercises». Αρχειοθετήθηκε 19/06/2018. Ανακτήθηκε 15/04/2019. Abstract:This document is a self-learning document for a course in Python programming. This course contains (1) a part for beginners, (2) a discussion of several advanced topics that are of interest to Python programmers, and (3) a Python workbook with lots of exercises.

Βιβλία
------

### Ελληνικά

* Αβούρης Ν. Μ. Κουκιάς, Β. Παλιουράς, Κ. Σγάρμπας, "PYTHON Εισαγωγή στους υπολογιστές Αρχειοθετήθηκε 2017-05-09 στο Wayback Machine.". 3η αναθεωρημένη έκδοση, Πανεπιστημιακές Εκδόσεις Κρήτης, 2016.
* Καρολίδης Δ. "Μαθαίνετε εύκολα Python", 3η έκδοση, Εκδόσεις Άβακας, 2021, ISBN: 978-960-6789-30-4, Κωδικός Ευδόξου: 102070351.
* J. Guttag, "Υπολογισμοί και προγραμματισμός με την Python", Εκδόσεις Κλειδάριθμος, 2015.
* T. Gaddis, "Ξεκινώντας με την Python", Εκδόσεις DaVinci Αρχειοθετήθηκε 2019-10-15 στο Wayback Machine. 2015.
* Αναστάσιος Χατζηπαπαδόπουλος, Εκπαιδευτικός Πληροφορικής, (2018). «Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον με Python» από users.sch.gr/chatzipap/. Αρχειοθετήθηκε 17/04/2018. Ανακτήθηκε 16/04/2019. Από τον πρόλογο: «Στο βιβλίο αυτό περιέχονται προτεινόμενες/ενδεικτικές λύσεις στα πανελλαδικά θέματα Γ & Δ(έτη 2000 –2017) του μαθήματος της Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον με τη χρήση όμως όχι  ψευδο-γλώσσας αλλά της Python(έκδοση 2.7.10) με τον τρόπο που αυτή παρουσιάζεται στα διδακτικά εγχειρίδια της Β’ και Γ’ Τάξης του Τομέα Πληροφορικής των ΕΠΑΛ.». (ISBN 978-960-93-9926-5)
* Χατζηγιαννάκης Νίκος, «Η γλώσσα Python σε βάθος», Εκδόσεις Κλειδάριθμος, 2023, ISBN: 978-960-645-471, Κωδικός Ευδόξου: 122075004

### Αγγλικά

* (Αγγλικά) Guzdial, M. (2004). Introduction to media computation: A multimedia cookbook in Python. Pearson/Custom Pub.

Δείτε επίσης
------------

* Ruby

Εξωτερικοί σύνδεσμοι
--------------------

* Η επίσημη ιστοσελίδα για τη γλώσσα (Αγγλικά)
* Ελληνική Κοινότητα Προγραμματιστών Python
* Εισαγωγή στην Python Αρχειοθετήθηκε 2010-09-15 στο Wayback Machine.
* Άμεση Python
* Τεκμηρίωση και περισσότερες πληροφορίες (Αγγλικά)
* Βιβλίο για την Python μεταφρασμένο από την ελληνική κοινότητα Ubuntu. Αρχειοθέτηση 2013-06-05.
* Python for Informatics στο P2PU
* Google's Python Class
* Python Programming στο en.wikibooks.org
* Python στο Curlie
* Διαδικτυακό μάθημα "Εισαγωγή στην Python" στην πλατφόρμα mathesis.cup.gr Αρχειοθετήθηκε 2019-04-16 στο Wayback Machine.
* Διαδικτυακό μάθημα "Προχωρημένος Προγραμματισμός με την Python" στην πλατφόρμα mathesis.cup.gr Αρχειοθετήθηκε 2019-04-16 στο Wayback Machine.
* Θερινό σχολείο Power Python (εισαγωγικό και προχωρημένο επίπεδο)
* Ελεύθερο Διαδικτυακό μάθημα για το πανελλαδικά εξεταζόμενο μάθημα του τομέα Πληροφορικής των ΕΠΑΛ "Προγραμματισμός Υπολογιστών" με Python στην πλατφόρμα moodle.sepchiou.gr

|  |  |
| --- | --- |
| Wikibooks logoWikibooks logo | Τα αγγλικά Βικιβιβλία έχουν βιβλία που έχουν σχέση με την:  **Python** |

|  |  |
| --- | --- |
| Commons logoCommons logo | Τα Wikimedia Commons έχουν πολυμέσα σχετικά με το θέμα   **Python** |


|  |  |  |  |
| --- | --- | --- | --- |
| 

| π • σ • ε
Γλώσσες προγραμματισμού |
| --- |
|  |
| 
* Ada
* ALGOL
* APL
* Applescript
* Assembly
* BASIC
* C
* C++
* C#
* COBOL
* Erlang
* Forth
* Fortran
* Go
* Haskell
* Java
* JavaScript
* Kotlin
* Lisp
* Logo
* Lua
* ML
* Objective-C
* Pascal
* Perl
* PHP
* Prolog
* Python
* R
* Ruby
* Rust
* SQL
* Shell
* Simula
* Smalltalk
* Swift
* Visual Basic
 |

 |

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| π • σ • ε
Ελεύθερο λογισμικό και λογισμικό ανοικτού κώδικα |
| --- |
|  |
| Γενικά | 
Copyleft · Γεγονότα και βραβεία · Ελεύθερο λογισμικό · Ορισμός του Ελεύθερου Λογισμικού · Δωρεάν και ελεύθερο · Κατάλογος ελεύθερου λογισμικού και λογισμικού ανοιχτού κώδικα · Λογισμικό ανοικτού κώδικα |
|  |
| Λειτουργικά συστήματα | 
AROS · BSD · Darwin · eCos · FreeDOS · GNU · Haiku · Inferno · Linux · Mach · MINIX · OpenSolaris · Plan 9 · ReactOS · Symbian |
|  |
| Ανάπτυξη λογισμικού | 
Eclipse · Free Pascal · GCC · Gambas · Java · LLVM · Lua · NetBeans · Open64 · Perl · PHP · Python · ROSE · Ruby · Tcl |
|  |
| Ιστορία | 
GNU ·Haiku ·Linux · Mozilla (Application Suite · Firefox · Thunderbird) |
|  |
| Οργανισμοί | 
Apache Software Foundation · Ίδρυμα Blender · Eclipse Foundation · freedesktop.org · Ίδρυμα Ελεύθερου Λογισμικού (Ευρώπη · India ·Latin America) · FSMI ·GNOME Foundation · GNU Project · Google Code ·KDE e.V. · Linux Foundation · Mozilla Foundation · Open Source Geospatial Foundation · Open Source Initiative · Python Software Foundation - Software Freedom Conservancy · SourceForge · Symbian Foundation · The Document Foundation · Xiph.Org Foundation · XMPP Standards Foundation · X.Org Foundation |
|  |
| Άδειες ελεύθερου λογισμικού | 
Apache · Artistic · BSD · GNU GPL · GNU LGPL · ISC · MIT · MPL · Ms-PL/RL · zlib · FSF approved licenses |
|  |
| Πρότυπα αδειών λογισμικού | 
Ορισμός του Λογισμικού Ανοιχτού Κώδικα · Ορισμός του Ελεύθερου Λογισμικού · Debian Free Software Guidelines |
|  |
| Σημαντικά θέματα | 
Binary blob · Canonical's contributor agreement · Digital rights management · Συμβατότητα καρτών γραφικών · License proliferation · Mozilla software rebranding · Proprietary software · Διαμάχη SCO-Linux · Ασφάλεια · Πατέντες λογισμικού · Περιορισμοί υλικού · Trusted Computing · Viral license |
|  |
| Άλλα θέματα | 
Εναλλακτικοί όροι · Κοινότητα · Διανομή Linux · Forking · Κίνημα · Microsoft Open Specification Promise · *Revolution OS* · Σύγκριση με λογισμικό κλειστού κώδικα |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| Καθιερωμένοι όροι | 
* WorldCat
* LCCN: sh96008834
* GND: 4434275-5
* SUDOC: 051626225
* BNF: cb13560465c (data)
* NKC: ph170668

 |

 |

|  |  |
| --- | --- |
| 

|  |
| --- |
| * Πύλη:Προγραμματισμός
 |

 |


1. ↑  «PYTHON». *Πανεπιστημιακές Εκδόσεις Κρήτης*. 2016-10-01. Αρχειοθετήθηκε από το πρωτότυπο στις 2017-05-09.. Ανακτήθηκε στις 2018-07-06.