3. Μεταβλητές – τύποι δεδομένων

Η έννοια της μεταβλητής στην Python

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

Οι μεταβλητές είναι ονόματα (ετικέτες) που δίδονται σε περιοχές της μνήμης του Η/Υ, οι οποίες μπορούν να αποθηκεύουν δεδομένα. Αναθέτουμε τιμές στις μεταβλητές με την εντολή ανάθεσης ή εκχώρησης. Οι εντολές εκχώρησης υπολογίζουν την τιμή μιας δεδομένης παράστασης και στη συνέχεια την εκχωρούν στη μεταβλητή. Μια εντολή εκχώρησης έχει την μορφή:  μεταβλητή = παράσταση όπου παράσταση είναι μια έκφραση που αποτιμάται, και με τον τελεστή εκχώρησης «=» η τιμή της έκφρασης εκχωρείται στη μεταβλητή.

Οι μεταβλητές δημιουργούνται την στιγμή που τους ανατίθονται δεδομένα. Ο τύπος της μεταβλητής που θα δημιουργηθεί είναι αυτός των δεδομένων που εκχωρούνται στη μεταβλητή. Για να δούμε τον τύπο δεδομένων μιας μεταβλητής χρησιμοποιούμε την εντολή type(<μεταβλητή>), όπως στο ακόλουθο παράδειγμα:

>>>a=7
>>>type(a)
<class 'int'>
>>>b=3.9
>>>type(b)
<class 'float'>
>>>c=12+34j
>>>type(c)
<class 'complex'>
>>>s='myname is Yiannis'
>>>type(s)
<class 'str'>
>>>c=[3, 7.9, 'op']
>>>type(c)
<class 'list'>

Μια μεταβλητή στην Python έχει όνομα που μπορεί να έχει οποιοδήποτε μήκος, χωρίς να έχει αρνητική επίδραση στην εκτέλεση του προγράμματος, ούτε στο τελικό μέγεθος του μεταφρασμένου κώδικα. Το όνομα μιας μεταβλητής πρέπει να ξεκινά από γράμμα του αλφαβήτου και μπορεί να αποτελείται από οποιοδήποτε συνδυασμό γραμμάτων, ψηφίων και του χαρακτήρα της κάτω παύλας (_). Να ληφθεί υπόψη ότι τα πεζά γράμματα διακρίνονται από τα κεφαλαία γράμματα, π.χ. τα cat, Cat, Cat, CAT, Cat είναι διαφορετικά αναγνωριστικά.

Η Python επιβάλει ένα σημαντικό περιορισμό στη χρήση ονομάτων μεταβλητών. Τα ονόματα που δίνουμε σε μεταβλητές δεν πρέπει να συμπίπτουν με ονόματα δεσμευμένων λέξεων. Δεσμευμένες λέξεις είναι οι λέξεις που χρησιμοποιούνται στα διάφορα μέρη του προγράμματος π.χ. for, if, else κ.τ.λ.

Οι σταθερές στην Python

Οι σταθερές στον προγραμματισμό παριστάνουν δεδομένα τα οποία είναι σταθερά και δεν μπορούν να αλλάξουν κατά την εκτέλεση του προγράμματος. Μια σταθερά είναι μια τιμή οποιοδήποτε τύπου δεδομένων ή συμβολοσειράς. Μια σταθερά συμβολοσειράς στον προγραμματισμό Python, τοποθετείται ανάμεσα σε μονά (‘ ‘ ), διπλά(“  “) ή τριπλά (‘’’   ‘’’) εισαγωγικά.

Οι τύποι δεδομένων στην Python

Στον προγραμματισμό Python υπάρχουν πέντε βασικοί προκαθορισμένοι τύποι δεδομένων: ο ακέραιος (int), ο πραγματικός (float), ο μιγαδικός (complex), η συμβολοσειρά (str) και ο λογικός (bool).

Ο ακέραιος τύπος (integer)

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

Οι αριθμητικές τιμές μπορούν να παρασταθούν ως δεκαδικοί, οκταδικοί, δυαδικοί ή δεκαεξαδικοί. Οι μεγάλοι ακέραιοι σημειώνονται με το κεφαλαίο γράμμα L.

Μερικά παραδείγματα αριθμών δείχνονται ακολούθως:

Πραγματικός τύπος (float)

Ο πραγματικός τύπος δεδομένων είναι εκείνοι οι αριθμοί που περικλείουν την υποδιαστολή. Για τους πραγματικούς αριθμούς κινητής υποδιαστολής, η Python τους αποθηκεύει σε δυο ξεχωριστά μέρη: τα δεκαδικά ψηφία και τον εκθέτη που ορίζει τη σωστή θέση της υποδιαστολής. Οι πραγματικοί αριθμοί σταθερής υποδιαστολής είναι εκείνοι που περιέχουν μόνο τα ψηφία 0123456789 και συμπεριλαμβάνουν την υποδιαστολή καθώς και το πρόσημο. Οι πραγματικοί αριθμοί που συμπεριλαμβάνουν την υποδιαστολή θα πρέπει να έχουν ένα ψηφίο πριν ή μετά την υποδιαστολή. Π.χ. 3.76 ή -0.4 ή 8. ή .3

Τα δεδομένα ακέραιου τύπου παριστάνονται με τέλεια ακρίβεια στη μνήμη του υπολογιστή σε αντίθεση με τους πραγματικούς τύπους δεδομένων που παριστάνονται συνήθως με κάποια προσέγγιση π.χ. το 1/3 αποθηκεύεται ως 0.333333333333333

Μιγαδικός τύπος δεδομένων

Μια τιμή μιγαδικού τύπου, αποτελείται από δυο μέρη: το πραγματικό και το φανταστικό, τα οποία μπορεί να είναι τιμές τύπου σταθερής ή κινητής υποδιαστολής. Μπορούμε να ορίσουμε μιγαδικές τιμές με την συνάρτηση  complex( ) η οποία παίρνει δύο ορίσματα το πραγματικό και το φανταστικό μέρος της μιγαδικής τιμής ή με την χρήση της φανταστικής μονάδας j:

Παράδειγμα

>>>a=1+2j
>>>print(a)
  (1+2j)
>>>result = a*2
>>>print(result)
  (2+4j)
>>>test1 = complex(1, 2)
>>>test2 = complex(2, 3)
>>>result2 = test1 + test2
>>>print(result2)
   (3+5j)
>>>print(test1*test2)
  (-4+7j)

Ο τύπος δεδομένων της συμβολοσειράς

Μια συμβολοσειρά είναι μια ακολουθία από χαρακτήρες που περικλείονται σε μονά ( ‘ ) ή διπλά ( “ ) ή τριπλά εισαγωγικά ( ‘’’ ). Μπορούμε να χρησιμοποιήσουμε μονά εισαγωγικά μέσα σε διπλά εισαγωγικά. Με τη χρήση τριπλών εισαγωγικών μπορούμε να δημιουργήσουμε συμβολοσειρές πολλαπλών γραμμών. Επίσης μπορούμε να χρησιμοποιήσουμε μονά και διπλά εισαγωγικά μέσα σε τριπλά εισαγωγικά.

Μια τιμή τύπου συμβολοσειράς μπορεί να έχει τους χαρακτήρες των γραμμάτων του λατινικού και ελληνικού αλφαβήτου, τα ψηφία 0 έως 9, το κενό και όλους τους χαρακτήρες που χρησιμοποιούνται για να δημιουργήσουμε εντολές Python (+ – * / : = , <  <=  >=  >  <>)

Ο λογικός τύπος δεδομένων

Μια τιμή λογικού τύπου δεδομένων μπορεί να πάρει μια από τις δυο τιμές False και True. Αυτός ο τύπος χρησιμοποιείται σε εντολές που χρειάζεται να πάρει η CPU μια απόφαση για την διακλάδωση της ροής εκτέλεσης του προγράμματος.

Η μεταβλητή είναι στην ουσία μια αναφορά σε αντικείμενο

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

sum = 78

ο επεξεργαστής θα δεσμεύσει χώρο για την μεταβλητή sum και θα αποθηκεύσει σ’ αυτόν την ακέραια τιμή 78. Στην πραγματικότητα, η Python θα δημιουργήσει αρχικά ένα κατάλληλο αντικείμενο για την αναπαράσταση της τιμής 78, στη συνέχεια θα δημειουργήσει τη μεταβλητή sum και έπειτα θα συνδέσει τη μεταβλητή sum με το αντικείμενο 78. Η εντολή

z = sum

δεν θα δεσμεύσει νέο χώρο για την μεταβλητή z, ώστε να αντιγράψει εκεί την τιμή 78. Επειδή και οι δυο μεταβλητές αποκτούν μετά την εκχώρηση την ίδια τιμή, η z “δείχνει” στο ίδιο αντικείμενο με την sum. Στην ουσία προσθέτουμε ένα επιπλέον όνομα για το υπάρχον αντικείμενο 78.

Αν δημιουργήσουμε ένα νέο αντικείμενο με τιμή 99 και το εκχωρήσουμε στη μεταβλητή z, θα αφαιρέσουμε το όνομα z από το αντικείμενο 78 και θα το συνδέσουμε με το νέο αντικείμενο:

z = 99

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

Μπορούμε να διαγράψουμε μια μεταβλητή – αντικείμενο με την εντολή del

del sum

Μπορούμε να δηλώσουμε πολλές μεταβλητές την ίδια στιγμή και να εκχωρήσουμε την ίδια τιμή π.χ.:

a = b = c = d = 100

Παρόμοια μπορούμε να έχουμε μαζική εκχώρηση τιμών σε μεταβλητές όπως π.χ.:

a, b, c = 9, 15, 7

Το οποίο είναι ισοδύναμο με a=9 και b=15 καθώς και c=7