Τα βασικά
Το να τυπώσετε απλά «Χαίρε, Κόσμε!» δεν είναι αρκετό, είναι; Θέλετε να δημιουργήσετε περισσότερα - θέλετε να κρατήσετε κάποια δεδομένα εισόδου, να τα χειριστείτε και να εξάγετε κάτι από αυτά. Μπορούμε να το επιτύχουμε αυτό στην Python με σταθερές και μεταβλητές.
Κυριολεκτικές σταθερές (Literal Constants)
Ένα παράδειγμα κυριολεκτικής σταθεράς είναι ένας αριθμός όπως 5
, 1.23
, 9.25e-3
ή μια συμβολοσειρά όπως 'Αυτή είναι μια συμβολοσειρά'
ή "Μια συμβολοσειρά!"
. Αποκαλείται κυριολεκτική διότι κυριολεκτεί - η τιμή της ορίζεται κυριολεκτικά. Ο αριθμός 2 αναπαριστά τον εαυτό του και τίποτα άλλο - είναι σταθερά διότι η τιμή της δε μπορεί να αλλάξει. Άρα, όλα αυτά αναφέρονται ως κυριολεκτικές σταθερές.
Αριθμοί
Οι αριθμοί στην Python είναι τριών τύπων: οι ακέραιοι (integers), οι αριθμοί κινητής υποδιαστολής (floating point) και οι μιγαδικοί αριθμοί (complex numbers).
- Ένα παράδειγμα ακέραιου είναι το
2
και είναι απλά ένας ακέραιος αριθμός. - Παραδείγματα αριθμών κινητής υποδιαστολής (ή floats για συντομία) είναι οι
3.23
και52.3E-4
. Το σύμβολοE
δηλώνει δύναμη του 10. Σε αυτή την περίπτωση, το52.3E-4
σημαίνει 52.3 * 10-4. - Παραδείγματα μιγαδικών αριθμών είναι οι
(-5+4j)
και(2.3 - 4.6j)
- Σημείωση για έμπειρους προγραμματιστές
-
Δεν υπάρχει ξεχωριστός 'long int' τύπος. Ο ακέραιος μπορεί να έχει κάθε τιμή.
Συμβολοσειρές (Strings)
Μια συμβολοσειρά είναι μια ακολουθία από χαρακτήρες. Οι συμβολοσειρές είναι βασικά ένα μάτσο λέξεις. Οι λέξεις μπορεί να είναι στην αγγλική ή σε κάθε γλώσσα που υποστηρίζεται από το πρότυπο Unicode, ουσιαστικά σε σχεδόν κάθε γλώσσα του κόσμου.
- Σημείωση για έμπειρους προγραμματιστές
-
Δεν υπάρχουν "ASCII-only" συμβολοσειρές, διότι το πρότυπο Unicode αποτελεί υπερσύνολο του ASCII. Αν απαιτείται ένα ASCII-encoded byte-stream, τότε χρησιμοποιείστε
str.encode("ascii")
. Για λεπτομέρειες, δείτε παρακαλώ τη σχετική συζήτηση στο Stack Overflow. Από προεπιλογή, όλες οι συμβολοσειρές είναι σε Unicode.
Μπορώ να σας εγγυηθώ ότι σχεδόν σε κάθε πρόγραμμα Python που θα γράψετε θα χρησιμοποιήσετε συμβολοσειρές, γι' αυτό προσέξτε ιδιαίτερα τα παρακάτω για τη χρήση τους στην Python.
Μονά εισαγωγικά
Μπορείτε να ορίσετε συμβολοσειρές με μονά εισαγωγικά, για παράδειγμα 'Με λένε Γιώργο και ποτέ δεν τραγουδάω'
. Η μορφοποίηση, π.χ κενοί χαρακτήρες (Whitespace) και στηλοθέτες (Tabs), παραμένει ως έχει.
>>> a = 'Με λένε Γιώργο και ποτέ δεν τραγουδάω' >>> print(a) Με λένε Γιώργο και ποτέ δεν τραγουδάω >>> b = 'Με λένε Γιώργο και ποτέ δεν τραγουδάω\nγια της αγάπης τον γλυκόπικρο καημό,' >>> print(b) Με λένε Γιώργο και ποτέ δεν τραγουδάω για της αγάπης τον γλυκόπικρο καημό,
Διπλά εισαγωγικά
Οι συμβολοσειρές με διπλά εισαγωγικά λειτουργούν ακριβώς όπως και με μονά εισαγωγικά. Για παράδειγμα "Πώς σε λένε;"
>>> a = "Πώς σε λένε;" >>> print(a) Πώς σε λένε; >>> b = "- Πώς σε λένε;\n- Με λένε Γιώργο." >>> print(b) - Πώς σε λένε; - Με λένε Γιώργο.
Τριπλά εισαγωγικά
Μπορείτε να ορίσετε συμβολοσειρές πολλαπλών γραμμών με τριπλά εισαγωγικά - ("""
ή '''
). Χρησιμοποιήστε μονά εισαγωγικά και διπλά εισαγωγικά ελεύθερα μέσα σε τριπλά εισαγωγικά. Για παράδειγμα:
'''Μια συμβολοσειρά πολλών γραμμών. Αυτή είναι η πρώτη γραμμή. Αυτή είναι η δεύτερη γραμμή. "Πώς σε λένε;" το ρώτησα. Μου είπε: 'Μποντ. Τζέμης Μποντ.' '''
Ακολουθίες διαφυγής (Escape Sequences)
Υποθέστε ότι θα θέλατε μια συμβολοσειρά που να περιέχει ένα μονό εισαγωγικό ('
), πώς θα το ορίσετε; Για παράδειγμα, η συμβολοσειρά είναι Δε σ' άκουσα!. Δεν μπορείτε να το ορίσετε ως 'Δε σ' άκουσα!'
διότι η Python θα μπερδευτεί με την αρχή και το τέλος της συμβολοσειράς. Γι'αυτό, πρέπει να ορίσετε ξεχωριστά ότι το μονό εισαγωγικό δε δηλώνει το τέλος της συμβολοσειράς. Η λύση είναι με τη χρήση του αποκαλούμενου χαρακτήρα διαφυγής. Ορίζετε το μονό εισαγωγικό ως \'
- προσέξτε ότι o χαρακτήρας είναι αριστερή πλάγια κάθετος (backslash). Τώρα, μπορείτε να ορίσετε τη συμβολοσειρά ως 'Δε σ\' άκουσα!'
.
Λάθος:
>>> a = 'Δε σ' άκουσα!' File "<stdin>", line 1 a = 'Δε σ' άκουσα!' ^ SyntaxError: invalid syntax
Σωστό:
>>> a = 'Δε σ\' άκουσα!' >>> print(a) Δε σ' άκουσα!
Ένας άλλος τρόπος ορισμού της συγκεκριμένης συμβολοσειράς είναι π.χ. "Δε σ' άκουσα!"
, με τη χρήση διπλών εισαγωγικών. Παρομοίως, πρέπει να χρησιμοποιήσετε ένα χαρακτήρα διαφυγής για ένα διπλό εισαγωγικό εντός μιας συμβολοσειράς διπλών εισαγωγικών. Επίσης, πρέπει να υποδείξετε με χαρακτήρα διαφυγής την αριστερή πλάγια κάθετο \\
.
Λάθος:
>>> b = "Ο Γιάννης είπε: "Δε σ' άκουσα!"" File "<stdin>", line 1 b = "Ο Γιάννης είπε: "Δε σ' άκουσα!"" ^ SyntaxError: invalid syntax
Σωστό:
>>> b = "Ο Γιάννης είπε: \"Δε σ' άκουσα!\"" >>> print(b) Ο Γιάννης είπε: "Δε σ' άκουσα!"
Κι αν θέλετε να ορίσετε μια συμβολοσειρά δύο γραμμών; Ένας τρόπος είναι με τη χρήση τριπλών εισαγωγικών όπως δείξαμε προηγουμένως, ή με τη χρήση ενός χαρακτήρα διαφυγής - \n
στην αρχή της νέας γραμμής. Για παράδειγμα Αυτή είναι η πρώτη γραμμή\nΚι αυτή είναι η δεύτερη γραμμή
. Ένας ακόμα χαρακτήρας διαφυγής που είναι χρήσιμο να γνωρίζετε είναι ο στηλοθέτης (Tab) \t
. Υπάρχουν και πολλοί άλλοι χαρακτήρες διαφυγής αλλά εδώ ανέφερα τους χρησιμότερους. Παράδειγμα γραμμών με το χαρακτήρα καινούργιας γραμμής:
>>> x = 'Γραμμή 1\nΓραμμή 2' >>> print(x) Γραμμή 1 Γραμμή 2
Παράδειγμα στηλών με το χαρακτήρα tab:
>>> y = 'Στήλη 1\tΣτήλη 2\tΣτήλη 3\tΣτήλη 4' >>> print(y) Στήλη 1 Στήλη 2 Στήλη 3 Στήλη 4
Αξίζει να σημειωθεί ότι εντός μιας συμβολοσειράς, μία αριστερή πλάγια κάθετος στο τέλος της γραμμής δηλώνει ότι η συμβολοσειρά συνεχίζεται στην επόμενη γραμμή, αλλά δεν προσθέτει νέα γραμμή. Για παράδειγμα η συμβολοσειρά:
"Αυτή είναι η πρώτη πρόταση.\ Κι αυτή είναι η δεύτερη πρόταση."
ισοδυναμεί με "Αυτή είναι η πρώτη πρόταση. Κι αυτή είναι η δεύτερη πρόταση."
.
>>> z = "Αυτή είναι η πρώτη πρόταση.\ ... Κι αυτή είναι μια δεύτερη πρόταση στον κώδικα μου.\ ... Χώρισα τη συμβολοσειρά σε 4 γραμμές, αλλά θα εμφανιστεί\ ... σε μια." >>> print(z) Αυτή είναι η πρώτη πρόταση.Κι αυτή είναι μια δεύτερη πρόταση στον κώδικα μου.Χώρισα τη συμβολοσειρά σε 4 γραμμές, αλλά θα εμφανιστεί σε μια.
Ανεπεξέργαστες συμβολοσειρές (Raw Strings)
Αν πρέπει να ορίσετε κάποιες συμβολοσειρές και δε θέλετε ειδική επεξεργασία, π.χ. για το χειρισμό των χαρακτήρων διαφυγής, ορίστε μια ανεπεξέργαστη (raw) τιμή r
ή R
στη συμβολοσειρά. Ένα παράδειγμα γι' αυτό είναι: r"Newlines are indicated by \n"
. Σ' αυτή τη συμβολοσειρά, δε θα τυπωθεί μια νέα γραμμή, παρότι υπάρχει το \n
γιατί στις ανεπεξέργαστες συμβολοσειρές δεν αναλύονται οι χαρακτήρες διαφυγής.
Κανονική συμβολοσειρά:
>>> a = "Newlines are indicated by \n" >>> print(a) Newlines are indicated by >>>
Ανεπεξέργαστη συμβολοσειρά:
>>> b = r"Newlines are indicated by \n" >>> print(b) Newlines are indicated by \n >>>
Οι συμβολοσειρές είναι αμετάβλητες (Immutable)
Αυτό σημαίνει ότι αφού δημιουργήσατε μια συμβολοσειρά, δε μπορείτε να την αλλάξετε. Παρόλο που φαίνεται ως κάτι κακό, στην πραγματικότητα δεν είναι. Θα δούμε γιατί δεν είναι περιορισμός παρακάτω στα διάφορα προγράμματα που θα εξετάσουμε.
Συνένωση (Concatenation) κυριολεκτικών συμβολοσειρών
Αν τοποθετήσετε δίπλα δίπλα δύο κυριολεκτικές συμβολοσειρές, συνενώνονται αυτόματα από την Python. Για παράδειγμα, η συμβολοσειρές 'What\'s '
'your name?'
μετατρέπονται αυτομάτως σε "What's your name?"
.
- Σημείωση για προγραμματιστές C/C++
-
Δεν υπάρχει ξεχωριστός char τύπος δεδομένων στην Python. Δεν υπάρχει πραγματική ανάγκη γι' αυτό και είμαι σίγουρος ότι δε θα σας λείψει.
- Σημείωση για προγραμματιστές Perl/PHP
-
Θυμηθείτε ότι τα μονά και τα διπλά εισαγωγικά είναι το ίδιο - δε διαφέρουν σε καμία περίπτωση.
- Σημείωση για χρήστες κανονικών εκφράσεων (Regular Expressions)
-
Χρησιμοποιήστε πάντα ανεπεξέργαστες συμβολοσειρές για το χειρισμό κανονικών εκφράσεων. Διαφορετικά θα απαιτηθεί υπερβολική χρήση του χαρακτήρα διαφυγής. Για παράδειγμα, οι αναφορές μπορούν να ορισθούν ως
'\\1'
ήr'\1'
.
Η μέθοδος format
Μερικές φορές ίσως χρειαστεί να δημιουργήσουμε συμβολοσειρές από άλλες πληροφορίες. Εδώ είναι που χρησιμεύει η μέθοδος format()
.
- Σημείωση
-
Οι μέθοδοι εξηγούνται καλύτερα σε επόμενο κεφάλαιο. Προς το παρόν έχετε υπ' όψη ότι μετά την τελεία (
.
) ακολουθεί μια μέθοδος, η οποία εκτελεί μια λειτουργία σε οτιδήποτε προηγείται της τελείας. Στο επόμενο παράδειγμα, η μέθοδος format εκτελεί μια λειτουργία στη συμβολοσειρά που παρέχεται.
#!/usr/bin/python3 # Filename: str_format.py age = 25 name = 'Αρνόλδος' print('Ο {0} είναι {1} ετών.'.format(name, age)) print('Μα γιατί παίζει ο {0} με τον πύθωνα;'.format(name))
Έξοδος:
$ python str_format.py Ο Αρνόλδος είναι 25 ετών. Μα γιατί παίζει ο Αρνόλδος με τον πύθωνα;
Πώς λειτουργεί:
Μια συμβολοσειρά μπορεί να χρησιμοποιεί ορισμένες προδιαγραφές (specifications) και κατά συνέπεια, μπορεί να κληθεί η μέθοδος format για να τις αντικαταστήσει με αντίστοιχα ορίσματα (arguments) της μεθόδου format.
Παρατηρήστε την πρώτη δήλωση {0}
που αντιστοιχεί στη μεταβλητή name
η οποία είναι το πρώτο όρισμα στη μέθοδο μορφοποίησης. Παρομοίως, η δεύτερη δήλωση {1}
αντιστοιχεί στη μεταβλητή age
ως το δεύτερο όρισμα στη μέθοδο μορφοποίησης.
Θα είχαμε το ίδιο αποτέλεσμα και με αλληλουχία συμβολοσειρών: 'Ο ' + name + ' είναι ' + str(age) + ' ετών.'
, παρατηρήστε όμως την ασχήμια και την επιρρέπεια σε σφάλματα. Δεύτερον, η μετατροπή συμβολοσειράς θα είχε επιτευχθεί αυτόματα στη μέθοδο format αντί για τη ρητή μετατροπή εδώ. Τρίτον, με τη χρήση της μεθόδου format, μπορούμε να αλλάξουμε το μήνυμα, χωρίς να χρειάζεται να ασχοληθούμε με τις μεταβλητές που χρησιμοποιήθηκαν, και το αντίστροφο.
H Python με τη μέθοδο format αντικαθιστά κάθε τιμή ορίσματος στη θέση της προδιαγραφής. Μπορούν να δηλωθούν λεπτομερέστερες προδιαγραφές όπως:
>>> '{0:.3}'.format(1/3) # δεκαδικός (.) ακρίβεια τριών ψηφίων '0.333' >>> '{0:_^11}'.format('hello') # γέμισμα με κάτω παύλες (_) με το κείμενο κεντραρισμένο (^) σε πλάτος 11 '___hello___' >>> 'Ο {name} έγραψε το {book}'.format(name='Swaroop', book='A Byte of Python') # βάσει λέξεων-κλειδιών 'Ο Swaroop έγραψε το A Byte of Python'
Οι λεπτομέρειες αυτής της προδιαγραφής μορφοποίησης αναλύονται στο κείμενο Python Enhancement Proposal No. 3101.
Μεταβλητές (Variables)
Η χρήση μόνο κυριολεκτικών σταθερών καταντά σύντομα βαρετή - χρειαζόμαστε κάποιο τρόπο αποθήκευσης και επεξεργασίας κάθε πληροφορίας. Εδώ είναι που εφαρμόζονται οι μεταβλητές. Οι μεταβλητές είναι ακριβώς ότι το όνομα συνεπάγεται - οι τιμές τους ποικίλλουν, δηλαδή μπορείτε να αποθηκεύσετε οτιδήποτε με τη χρήση των μεταβλητών. Οι μεταβλητές είναι απλά τμήματα της μνήμης του Η/Υ σας όπου μπορείτε να αποθηκεύσετε πληροφορία. Αντίθετα με τις κυριολεκτικές σταθερές, χρειάζεστε κάποια μέθοδο (method) για να καλέσετε αυτές τις μεταβλητές, αλλά και να τους δώσετε ονόματα.
Ονοματοδοσία αναγνωριστικού
Οι μεταβλητές είναι παραδείγματα αναγνωριστικών. Τα αναγνωριστικά είναι δοθέντα ονόματα για να αναγνωρίσουν κάτι. Υπάρχουν ορισμένοι κανόνες που πρέπει να ακολουθήσετε για την ονοματοδοσία αναγνωριστικών:
- Ο πρώτος χαρακτήρας του αναγνωριστικού πρέπει να είναι ένα γράμμα της αλφαβήτου (κεφαλαίο ASCII ή πεζό ASCII ή χαρακτήρας Unicode) ή μια κάτω παύλα (
_
). - Το υπόλοιπο του ονόματος του αναγνωριστικού μπορεί να αποτελείται από γράμματα (κεφαλαία ASCII ή πεζά ASCII ή Unicode χαρακτήρες), κάτω παύλες (
_
) ή αριθμούς (0-9
). - Στο όνομα ενός αναγνωριστικού διακρίνονται τα πεζά από τα κεφαλαία (case-sensitive). Για παράδειγμα, το
myname
και τοmyName
δεν είναι το ίδιο. Παρατηρήστε το πεζόn
στο πρώτο παράδειγμα και το κεφαλαίοN
στο δεύτερο. - Παραδείγματα ορθής ονοματοδοσίας αναγνωριστικού:
i
,__my_name
,name_23
,a1b2_c3
καιrandom_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ
. - Παραδείγματα εσφαλμένης ονοματοδοσίας αναγνωριστικού:
2things
,this is spaced out
,my-name
, και"this_is_in_quotes"
. - Μπορείτε να χρησιμοποιείτε ελληνικές λέξεις ως ονόματα αναγνωριστικών, π.χ.
α
,το_όνομά_μου
.
Τύποι δεδομένων
Οι μεταβλητές μπορούν να διατηρούν τιμές διαφορετικών τύπων που ονομάζονται τύποι δεδομένων. Οι βασικοί τύποι είναι αριθμοί και συμβολοσειρές, όπως ήδη αναφέραμε. Στα επόμενα κεφάλαια, θα δούμε πώς μπορούμε να δημιουργήσουμε δικούς μας τύπους χρησιμοποιώντας Κλάσεις.
Αντικείμενα
Να θυμάστε, η Python αντιλαμβάνεται oτιδήποτε χρησιμοποιείται σε ένα πρόγραμμα ως ένα αντικείμενο, με μια γενική έννοια της λέξης. Αντί να πούμε το κάτι, λέμε το αντικείμενο.
- Σημείωση για χρήστες Αντικειμενοστρεφούς προγραμματισμού
-
Η Python είναι έντονα αντικειμενοστρεφής με την έννοια ότι οτιδήποτε είναι ένα αντικείμενο συμπεριλαμβάνοντας αριθμούς, συμβολοσειρές και συναρτήσεις.
Τώρα θα δούμε τη χρήση μεταβλητών μαζί με κυριολεκτικές σταθερές. Αποθηκεύστε το παρακάτω παράδειγμα και εκτελέστε το πρόγραμμα.
- Πώς να γράφετε προγράμματα Python
-
Η τυπική διαδικασία εφεξής για την αποθήκευση και εκτέλεση ενός προγράμματος Python είναι η ακόλουθη:
- Ανοίξτε τον αγαπημένο σας επεξεργαστή κώδικα.
- Γράψτε τον κώδικα του προγράμματος που δίνεται στο παράδειγμα.
- Αποθηκεύστε το ως αρχείο με το όνομα που αναφέρεται στο σχόλιο. Ακολουθώ τη σύμβαση αποθήκευσης όλων των προγραμμάτων Python με την κατάληξη
.py
. - Εκτελέστε το διερμηνευτή με την εντολή
python3 var.py
ή χρησιμοποιήστε το IDLE για την εκτέλεση των προγραμμάτων. Μπορείτε να κάνετε επίσης τα αρχεία εκτελέσιμα όπως εξηγήθηκε προηγουμένως.
Παράδειγμα: Χρήση μεταβλητών και κυριολεκτικών σταθερών
# Filename : var.py i = 5 print(i) i = i + 1 print(i) s = '''This is a multi-line string. This is the second line.''' print(s)
Έξοδος:
$ python var.py 5 6 This is a multi-line string. This is the second line.
Πώς λειτουργεί:
Να πώς λειτουργεί το πρόγραμμα. Πρώτα, εκχωρούμε την τιμή της κυριολεκτικής σταθεράς 5
στη μεταβλητή i
με τη χρήση του τελεστή εκχώρησης (=
). Αυτή η γραμμή ονομάζεται εντολή (statement) διότι δηλώνει ότι κάτι πρέπει να γίνει και στην περίπτωσή μας, συνδέουμε το όνομα της μεταβλητής i
με την τιμή 5
. Στη συνέχεια, εκτυπώνουμε την τιμή της μεταβλητής i
με τη χρήση της εντολής print
η οποία, φυσικά, απλά εκτυπώνει την τιμή της μεταβλητής στην οθόνη.
Μετά προσθέτουμε 1
στην αποθηκευμένη τιμή του i
και αποθηκεύεται ενημερωμένη εκ νέου. Κατόπιν την εκτυπώνουμε και όπως περιμένουμε, μας επιστρέφει την τιμή 6
.
Παρομοίως, εκχωρούμε την κυριολεκτική σταθερά στη μεταβλητή s
και εκτυπώνουμε στην οθόνη.
- Σημείωση για προγραμματιστές στατικών γλωσσών
-
Οι μεταβλητές χρησιμοποιούνται μόνο με την εκχώρηση σε αυτές μιας τιμής. Δεν απαιτείται/χρησιμοποιείται κάποια δήλωση (declaration) ή ο ορισμός τύπου δεδομένων (data type definition).
Λογικές και φυσικές γραμμές πηγαίου κώδικα
Μια φυσική γραμμή είναι αυτό που εσείς βλέπετε όταν γράφετε το πρόγραμμα. Μια λογική γραμμή είναι αυτό που βλέπει η Python ως μια ενιαία εντολή. Η Python υποθέτει σιωπηρά ότι κάθε φυσική γραμμή αντιστοιχεί σε μια λογική γραμμή.
Ένα παράδειγμα λογικής γραμμής είναι μια εντολή όπως print('Hello World')
- αν αυτή ήταν σε μια γραμμή από μόνη της (όπως τη βλέπετε στον επεξεργαστή κώδικα), τότε αυτή αντιστοιχεί επίσης σε μια φυσική γραμμή.
Έμμεσα, η Python ενθαρρύνει τη χρήση μιας και μόνο εντολής ανά γραμμή ώστε ο κώδικας να είναι ευανάγνωστος.
Εάν θέλετε να καθορίσετε περισσότερες από μία λογικές γραμμές σε μια μόνο φυσική γραμμή, τότε πρέπει να το ορίσετε ρητά με τη χρήση του ερωτηματικού (semicolon) (;
) και δείχνει το τέλος μιας λογικής γραμμής/εντολής. Για παράδειγμα, το
i = 5 print(i)
είναι ουσιαστικά ίδιο με το
i = 5; print(i);
και το ίδιο μπορεί να γραφτεί ως
i = 5; print(i);
ή ακόμη και
i = 5; print(i)
Ωστόσο, συστήνω να συνηθίσετε να προγραμματίζετε γράφοντας μία και μόνο λογική γραμμή σε μια ενιαία φυσική γραμμή μόνο. Χρησιμοποιήστε περισσότερες φυσικές γραμμές για μία μόνο λογική γραμμή, αν αυτή είναι όντως μεγάλη. Η ιδέα είναι να αποφευχθεί το ερωτηματικό, όσο το δυνατόν περισσότερο, ώστε ο κώδικας να είναι ευανάγνωστος. Στην πραγματικότητα, δεν έχω χρησιμοποιήσει ποτέ, ούτε έχω δει ερωτηματικό σε ένα πρόγραμμα Python.
Ακολουθεί ένα παράδειγμα σύνταξης μιας λογικής γραμμής που εκτείνεται σε πολλές φυσικές γραμμές. Αυτό αναφέρεται ως explicit line joining.
s = 'This is a string. \ This continues the string.' print(s)
Η έξοδος του παραπάνω κώδικα:
This is a string. This continues the string.
Παρομοίως,
print\ (i)
είναι το ίδιο με
print(i)
Μερικές φορές, υπάρχει μια σιωπηρή παραδοχή όπου δε χρειάζεται να χρησιμοποιήσετε μια αριστερή πλάγια κάθετο. Αυτή είναι η περίπτωση όπου η λογική γραμμή χρησιμοποιεί παρενθέσεις ()
, αγκύλες []
ή άγκιστρα {}
. Αυτό αναφέρεται ως implicit line joining. Θα το δείτε στην πράξη όταν θα γράψουμε προγράμματα με λίστες στα επόμενα κεφάλαια.
Εσοχή κώδικα (Indentation)
Ο κενός χώρος είναι σημαντικός στην Python. Πράγματι, Ο κενός χαρακτήρας στην αρχή της γραμμής είναι σημαντικός. Αυτό αποκαλείται εσοχή κώδικα. Οι αρχικοί κενοί χαρακτήρες (κενά και στηλοθέτες) στην αρχή της λογικής γραμμής καθορίζουν το επίπεδο εσοχής της λογικής γραμμής, και αυτό με τη σειρά του προσδιορίζει την ομαδοποίηση των εντολών.
Αυτό σημαίνει ότι οι εντολές που πάνε μαζί πρέπει και οφείλουν να έχουν το ίδιο επίπεδο εσοχής. Κάθε τέτοια ομάδα εντολών, καλείται τμήμα (block). Θα δούμε παραδείγματα για τη σημασία των τμημάτων στα επόμενα κεφάλαια.
Να θυμάστε πάντα ότι οι λάθος εσοχές μπορεί να προκαλέσουν σφάλματα. Για παράδειγμα:
i = 5 print('Η τιμή είναι ', i) # Σφάλμα! Προσέξτε το διάστημα στην αρχή της γραμμής print('Επαναλαμβάνω, η τιμή είναι ', i)
File "whitespace.py", line 4 print('Η τιμή είναι ', i) # Σφάλμα! Προσέξτε το διάστημα στην αρχή της γραμμής ^ IndentationError: unexpected indent
Προσέξτε τον κενό χαρακτήρα στην αρχή της δεύτερης γραμμής. Το σφάλμα που υποδεικνύει η Python μας λέει ότι η σύνταξη του προγράμματος είναι άκυρη, δηλαδή, ο κώδικας του προγράμματος δε γράφτηκε σωστά. Που σημαίνει για σας ότι δε μπορείτε αυθαίρετα να ξεκινάτε νέα τμήματα εντολών (εκτός από το προεπιλεγμένο κύριο τμήμα που χρησιμοποιούσατε συνέχεια, φυσικά). Οι περιπτώσεις που μπορείτε να εφαρμόσετε νέα τμήματα θα αναπτυχθούν στα επόμενα κεφάλαια, όπως το κεφάλαιο για τον έλεγχο ροής.
- Χρήση της εσοχής
-
Να μην αναμιγνύετε στηλοθέτες και κενά στις εσοχές διότι θα προκληθεί ασυμβατότητα μεταξύ διαφορετικών λειτουργικών. Σας συνιστώ τη χρήση είτε ενός μονού στηλοθέτη (1 tab) ή τεσσάρων κενών (4 spaces) για κάθε επίπεδο εσοχής. Επιλέξτε ένα από τα δύο στυλ εσοχών. Και σημαντικότερο είναι να επιλέξετε ένα και να το χρησιμοποιείτε σταθερά, δηλαδή συνηθίστε αυτό το στυλ μόνο.
- Σημείωση για προγραμματιστές στατικών γλωσσών
-
Η Python θα χρησιμοποιεί για πάντα το επίπεδο εσοχής (κενά και στηλοθέτες) για τον καθορισμό των τμημάτων και ποτέ αγκύλες (braces). Εκτελέστε
from __future__ import braces
για περισότερες πληροφορίες.
Σύνοψη
Τώρα αφού διυλίσαμε τις λεπτομέρειες, μπορούμε να προχωρήσουμε σε πιο ενδιαφέροντα θέματα όπως τις εντολές ελέγχου ροής. Βεβαιωθείτε ότι είστε άνετοι με όσα διαβάσατε σε αυτό το κεφάλαιο.