1.Εισαγωγή

Αυτό το εγχειρίδιο αναφοράς περιγράφει την γλώσσα προγραμματισμού Python. Δεν προορίζεται ως εγχειρίδιο εκμάθησης.

Στην προσπάθεια το έγγραφο αυτό να είναι όσο το δυνατόν πιο ακριβές, επιλέχθηκε αρχικά η Αγγλική γλώσσα, και ύστερα μεταφράστηκε στην Ελληνική, και όχι οι επίσημες προδιαγραφές, με εξαίρεση την συντακτική και λεξιλογική ανάλυση. Αυτό θα πρέπει να κάνει το έγγραφο πιο κατανοητό στον μέσο αναγνώστη, αλλά θα αφήσει χώρο για αμφισημίες. Συνεπώς, αν ερχόσουν από τον Άρη και προσπαθούσες να υλοποιήσεις ξανά την Python από το έγγραφο αυτό και μόνο, μάλλον θα χρειαζόταν να μαντέψεις κάποια πράγματα και για την ακρίβεια ίσως θα κατέληγες να υλοποιείς μια τελείως διαφορετική γλώσσα. Από την άλλη πλευρά, αν χρησιμοποιείς την Python και αναρωτιέσαι ποιοι είναι οι ακριβείς κανόνες σχετικά με έναν συγκεκριμένο τομέα της γλώσσας, τότε σίγουρα θα τους βρεις εδώ πέρα. Αν θα ήθελες να δεις έναν πιο επίσημο ορισμό της γλώσσας, ίσως θα μπορούσες να προσφέρεις λίγο από τον χρόνο σου — ή να φτιάξεις μια μηχανή κλωνοποίησης :-).

Είναι επικίνδυνο να προσθέσουμε πολλές λεπτομέρειες υλοποίησης σε ένα έγγραφο αναφοράς μίας γλώσσας — η υλοποίηση δύναται να αλλάξει, και άλλες υλοποιήσεις της ίδιας γλώσσας μπορεί να λειτουργούν διαφορετικά. Από την άλλη, η CPython είναι μία υλοποίηση της Python με ευρεία χρήση (ωστόσο εναλλακτικές υλοποιήσεις συνεχίζουν να υποστηρίζονται), και οι συγκεκριμένες της ιδιομορφίες ενίοτε αξίζουν αναφορά, ειδικά εκεί που η υλοποίηση επιβάλλει επιπρόσθετους περιορισμούς. Επομένως, θα βρεις σύντομες «σημειώσεις υλοποίησης» σε διάφορα μέρη του κειμένου.

Κάθε υλοποίηση της Python συνοδεύεται από έναν αριθμό ενσωματωμένων και πρότυπων module. Αυτές είναι καταγεγραμμένες στοThe Python Standard Library. Κάποια ενσωματωμένα module αναφέρονται όταν αλληλεπιδρούν με έναν σημαντικό τρόπο με τον ορισμό της γλώσσας.

1.1.Εναλλακτικές Υλοποιήσεις

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

Γνωστές υλοποιήσεις περιλαμβάνουν:

CPython

Αυτή είναι η πρωτότυπη και η πιο καλοδιατηρημένη υλοποίηση της Python, γραμμένη στην C. Νέες λειτουργίες της γλώσσας συνήθως εμφανίζονται πρώτα εδώ.

Jython

Η υλοποίηση της Python στην Java. Αυτή η υλοποίηση μπορεί να χρησιμοποιηθεί ως γλώσσα δέσμης ενεργειών για εφαρμογές στην Java, ή μπορεί να χρησιμοποιηθεί για να δημιουργήσει εφαρμογές με τη χρήση των βιβλιοθηκών των κλάσεων της Java. Συχνά επίσης χρησιμοποιείται για να δημιουργήσει τεστ για τις βιβλιοθήκες της Java. Περισσότερες πληροφορίες μπορείτε να βρείτε στηνιστοσελίδα της Jython.

Python για το .NET

Αυτή η υλοποίηση στην πραγματικότητα χρησιμοποιεί την υλοποίηση CPython, αλλά είναι μία διαχειριζόμενη εφαρμογή του .NET και κάνει διαθέσιμες τις .NET βιβλιοθήκες. Δημιουργήθηκε από τονBrian Lloyd. Για περισσότερες πληροφορίες, δείτε τηναρχική σελίδα της Python για το .NET.

IronPython

Μια εναλλακτική Python για το .NET. Σε αντίθεση με το Python.NET, αυτή είναι μία ολοκληρωμένη υλοποίηση της Python που παράγει IL, και κάνει μεταγλώττιση του κώδικα της Python απευθείας στη γλώσσα assembly του .NET. Δημιουργήθηκε από τον Jim Hugunin, τον πρωτότυπο δημιουργό της Jython. Για περισσότερες πληροφορίες δείτε τηνιστοσελίδα της IronPython.

PyPy

Μια υλοποίηση της Python γραμμένη εξ ολοκλήρου σε Python. Υποστηρίζει αρκετές προηγμένες λειτουργίες που δεν υπάρχουν σε άλλες υλοποιήσεις όπως υποστήριξη για stackless και τον μεταγλωττιστή Just in Time. Ένας από τους στόχους του πρότζεκτ είναι να ενθαρρύνει τον πειραματισμό με την ίδια την γλώσσα κάνοντας πιο εύκολη την τροποποίηση του διερμηνέα (αφού είναι γραμμένος στην Python). Περισσότερες πληροφορίες είναι διαθέσιμες στηναρχική σελίδα του PyPy πρότζεκτ.

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

1.2.Σημειογραφία

Οι περιγραφές στην λεξιλογική ανάλυση και σύνταξη χρησιμοποιούν έναν τροποποιημένο γραμματικό συμβολισμό στηνμορφή Μπάκους-Νάουρ (BNF). Αυτό χρησιμοποιεί τον ακόλουθο τρόπο ορισμού:

name:lc_letter (lc_letter |"_")*lc_letter:"a"..."z"

Η πρώτη γραμμή λέει ότι έναname είναι έναlc_letter ακολουθούμενο από μία σειρά από μηδέν ή περισσότεραlc_letters και κάτω παύλες. Έναlc_letter με τη σειρά του είναι οποιοσδήποτε από τους μονούς χαρακτήρες'a' έως'z'. (Αυτός ο κανόνας στην πραγματικότητα εφαρμόζεται για τα ονόματα που ορίζονται στους λεξιλογικούς και γραμματικούς κανόνες αυτού του εγγράφου.)

Κάθε κανόνας ξεκινά με ένα όνομα (το οποίο είναι ένα όνομα ορισμένο από τον κανόνα) και::=. Μία κάθετη γραμμή (|) χρησιμοποιείται για να διαχωρίσει τις εναλλακτικές· έχει την μικρότερη προτεραιότητα στην σειρά προτεραιότητας πράξεων αυτού του συμβολισμού. Ένας αστερίσκος (*) σημαίνει μηδέν ή περισσότερες επαναλήψεις του προηγούμενου αντικειμένου· παρομοίως, το συν (+) σημαίνει μία ή περισσότερες επαναλήψεις, και μία φράση περιφραγμένη από αγκύλες ([]) σημαίνει μηδέν ή μία περίπτωση (με άλλα λόγια, η περιφραγμένη φράση είναι προαιρετική). Οι τελεστές* και+ ενώνονται όσο το δυνατόν πιο σφιχτά· οι παρενθέσεις χρησιμοποιούνται για ομαδοποίηση. Οι συμβολοσειρές είναι περιφραγμένες από εισαγωγικά. Οι κενοί χαρακτήρες είναι μόνο σημαντικοί για να διαχωρίσουν ταtokens. Οι κανόνες συνήθως περιέχονται σε μία μονή γραμμή· οι κανόνες με πολλές εναλλακτικές μπορεί να μορφοποιηθούν εναλλακτικά με κάθε γραμμή μετά την πρώτη να ξεκινάει με μια κάθετη γραμμή.

Στους λεξιλογικούς ορισμούς (όπως στο παραπάνω παράδειγμα), δύο περισσότεροι κανόνες χρησιμοποιούνται: Δύο χαρακτήρες χωρισμένοι από τρεις τελείες σημαίνει επιλογή όποιου μονού χαρακτήρα στο συγκεκριμένο (κλειστό) εύροςASCII χαρακτήρων. Η φράση ανάμεσα σε γωνιακές παρενθέσεις (<...>) δίνει μία άτυπη περιγραφή του ορισμένου συμβόλου· π.χ., αυτό θα μπορούσε να χρησιμοποιηθεί για να περιγράψει την ιδέα του “χαρακτήρα ελέγχου” (control character) αν χρειαστεί.

Αν και η σημειογραφία που χρησιμοποιείται είναι σχεδόν η ίδια, υπάρχει μεγάλη διαφορά ανάμεσα στη σημασία των λεξιλογικών και των συντακτικών ορισμών: ένας λεξιλογικός ορισμός λειτουργεί με τους μεμονωμένους χαρακτήρες της πηγής εισόδου, ενώ ένας ορισμός σύνταξης λειτουργεί στην ροή τωνtoken που δημιουργείται από τη λεξιλογική ανάλυση. Όλες οι χρήσεις τουBNF στο επόμενο κεφάλαιο («Λεξιλογική Ανάλυση») είναι λεξιλογικοί ορισμοί· οι χρήσεις στα ακόλουθα κεφάλαια είναι συντακτικοί ορισμοί.