Συντονιστής: Geochr
Python el:Τελεστές και Εκφράσεις
Εισαγωγή
Οι περισσότερες εντολές που γράφετε θα περιέχουν εκφράσεις. Ένα απλό παράδειγμα μίας έκφρασης είναι 2 + 3. Μία έκφραση μπορεί να διαχωριστεί σε τελεστές και τελεστέους.
Οι τελεστές είναι λειτουργίες που κάνουν κάτι και μπορούν να αναπαρασταθούν με σύμβολα όπως το + ή με ειδικές λέξεις-κλειδιά. Οι τελεστές απαιτούν κάποια δεδομένα πάνω στα οποία θα λειτουργήσουν και αυτά τα δεδομένα ονομάζονται τελεστέοι. Στη συγκεκριμένη περίπτωση, οι τελεστέοι είναι το 2 και το 3.
Τελεστές
Θα ρίξουμε μία γρήγορη ματιά στους τελεστές και τη χρήση τους:
Σημειώστε οτι μπορείτε να βρείτε την τιμή των εκφράσεων που δίνονται στα παραδείγματα χρησιμοποιώντας το διερμηνευτή διαδραστικά. Για παράδειγμα, για τον έλεγψο της έκφρασης 2 + 3, χρησιμοποιήστε την κονσόλα του διαδαστικού διερμηνευτή της Python:
>>> 2 + 3
5
>>> 3 * 5
15
>>>
Τελεστής Όνομα Εξήγηση Παραδείγματα
+ Συν Προσθέτει δύο αντικείμενα Το 3 + 5 δίνει 8. Το 'a' + 'b' δίνει 'ab'
- Μείον Είτε δίνει έναν αρνητικό αριθμό, ή αφαιρεί έναν αριθμό από έναν άλλο Το -5.2 δίνει έναν αρνητικό αριθμό. Το 50 - 24 δίνει 26
* Επί Δίνει το γινόμενο δύο αριθμών ή μιά συμβολοσειρά (string) επαναλαμβανόμενη τόσες φορές Το 2 * 3 δίνει 6. Το 'la' * 3 δίνει 'lalala'
** Δύναμη Επιστρέφει το x υψωμένο στη δύναμη y Το 3 ** 4 δίνει 81 (δηλ. 3 * 3 * 3 * 3)
/ Δια Διαιρεί το x με το y Το 4 / 3 δίνει 1.3333333333333333
// Διαίρεση στρογγυλοποιημένη προς τα κάτω(Floor Division) Επιστρέφει τον κοντινότερο (προς τα κάτω) ακέραιο στο πηλίκο Το 4 // 3 δίνει 1
% Υπόλοιπο (Modulo) Επιστρέφει το υπόλοιπο της διαίρεσης Το 8 % 3 δίνει 2. Το -25.5 % 2.25 δίνει 1.5
<< Αριστερή μετάθεση (Left shift) Μεταθέτει τα bits του αριθμού προς τα αριστερά κατά το πλήθος των θέσεων που καθορίστηκε (Κάθε αριθμός αναπαρίσταται στη μνήμη με bits (δυαδικά ψηφία - binary digits) - δηλαδή με 0 και 1) Το 2 << 2 δίνει 8. Το 2 αναπαρίσταται ως 10 σε bits. Η μετάθεση προς τα αριστερά κατά 2 bits μας δίνει 1000 που παριστάνει το δεκαδικό 8
>> Δεξιά μετάθεση (Right shift) Μεταθέτει τα bits του αριθμού προς τα δεξιά κατά το πλήθος των θέσεων που καθορίστηκε Το 11 >> 1 δίνει 5. Το 11 αναπαρίσταται σε bits ως 1011 που όταν μετατεθούν δεξιά κατά 1 bit μας δίνουν 101 που είναι το δεκαδικό 5.
& Δυαδικό ΚΑΙ (Bitwise AND) Δυαδικό ΚΑΙ των αριθμών Το 5 & 3 δίνει 1
| Δυαδικό Ή (Bit-wise OR) Δυαδικό Ή των αριθμών Το 5 | 3 δίνει 7
^ Δυαδικό αποκλειστικό Ή (Bit-wise XOR) Δυαδικό XOR των αριθμών Το 5 ^ 3 δίνει 6
~ Δυαδική αντιστροφή (Bit-wise invert) Το δυαδικό αντίστροφο του x είναι -(x+1) Το ~5 δίνει -6
< Μικρότερο από Επιστρέφει το αν το x είναι μικρότερο από το y. Όλοι οι τελεστές σύγκρισης επιστρέφουν True (Αληθής) ή False (Ψευδής). Σημειώστε οτι τα ονόματα αυτά ξεκινούν με κεφαλαίο Το 5 < 3 δίνει False και το 3 < 5 δίνει True. Οι συγκρίσεις μπορούν να συνδυαστούν αλυσιδωτά κατά βούληση: Το 3 < 5 < 7 δίνει True
> Μεγαλύτερο από Επιστρέφει το αν το x είναι μεγαλύτερο από το y Το 5 > 3 επιστρέφει True.Αν και οι δύο τελεστέοι είναι αριθμοί, πρώτα μετατρέπονται σε έναν κοινό τύπο. Αλλιώς, επιστρέφει πάντα False
<= Μικρότερο από ή ίσο με Επιστρέφει το αν το x είναι μικρότερο από ή ίσο με το y Το x = 3; y = 6; x <= y επιστρέφει True
>= Μεγαλύτερο από ή ίσο με Επιστρέφει το αν το x είναι μεγαλύτερο από ή ίσο με το y Το x = 4; y = 3; x >= 3 επιστρέφει True
== Ίσο με Συγκρίνει αν τα αντικείμενα είναι ίσα Το x = 2; y = 2; x == y επιστρέφει True. Το x = 'str'; y = 'stR'; x == y επιστρέφει False. Το x = 'str'; y = 'str'; x == y επιστρέφει True
!= Διαφορετικό από Συγκρίνει αν τα αντικείμενα ΔΕΝ είναι ίσα Το x = 2; y = 3; x != y επιστρέφει True
not Λογικό ΌΧΙ (Boolean NOT) Αν το x είναι True, επιστρέφει False. Αν το x είναι False, επιστρέφει True Το x = True; not x επιστρέφει False
and Λογικό ΚΑΙ (Boolean AND) Το x and y επιστρέφει False αν το x είναι False, αλλιώς υπολογίζει και την τιμή του y Το x = False; y = True; x and y επιστρέφει False αφού το x είναι False. Σε αυτή την περίπτωση, η Python δε θα ελέγξει την τιμή του y αφού γνωρίζει οτι η αριστερή πλευρά της έκφρασης 'and' είναι False που υποδηλώνει οτι ολόκληρη η έκφραση θα είναι False ανεξάρτητα από τις άλλες τιμές. Αυτή η τεχνική αποκαλείται short-circuit evaluation.
or Λογικό Ή (Boolean OR) Αν το x είναι True, επιστρέφει True, αλλιώς υπολογίζει και την τιμή του y Το x = True; y = False; x or y επιστρέφει True. Η τεχνική short-circuit evaluation εφαρμόζεται και εδώ επίσης.
Συντόμευση για μαθηματικές πράξεις και την ανάθεση
Είναι συνήθες φαινόμενο η εκτέλεση μίας μαθηματικής πράξης στα περιεχόμενα μίας μεταβλητής και στη συνέχεια η ανάθεση του αποτελέσματος πίσω στη μεταβλητή, γι' αυτό υπάρχει μία συντόμευση για αυτού του είδους τις εκφράσεις:
Μπορείτε να γράψετε το:
a = 2; a = a * 3
ως:
a = 2; a *= 3
Παρατηρήστε οτι η έκφραση μεταβλητή = μεταβλητή πράξη γίνεται μεταβλητή πράξη= .
Σειρά υπολογισμού (προτεραιότητα των τελεστών)
Αν είχατε μία έκφραση όπως 2 + 3 * 4, γίνεται πρώτα η πρόσθεση ή ο πολλαπλασιασμός; Τα μαθηματικά μας λένε οτι πρώτα πρέπει να γίνει ο πολλαπλασιασμός. Αυτό σημαίνει οτι ο τελεστής του πολλαπλασιασμού έχει υψηλότερη προτεραιότητα από τον τελεστή της πρόσθεσης.
Ο ακόλουθος πίνακας μας δίνει τον πίνακα προτεραιοτήτων για την Python, από τη χαμηλότερη προς την υψηλότερη προτεραιότητα. Αυτό σημαίνει οτι σε μία δεδομένη έκφραση, η Python θα υπολογίσει τους τελεστές και τις εκφράσεις που βρίσκονται χαμηλότερα στον πίνακα πριν από αυτούς που βρίσκονται ψηλότερα.
Ο παρακάτω πίνακας, από το reference manual της Python, παρέχεται χάριν πληρότητας. Είναι πολύ καλύτερο να χρησιμοποιείται παρενθέσεις για να ομαδοποιείται σωστά τελεστές και τελεστέους ώστε να ορίσετε ξεκάθαρα την προτεραιότητα. Έτσι το πρόγραμμα γίνεται πιο ευανάγνωστο. Δείτε το Αλλάζοντας τη Σειρά Υπολογισμού πιο κάτω για λεπτομέρειες.
Τελεστής Περιγραφή
lambda Έκφραση λάμδα (Lambda Expression)
or Λογικό Ή (Boolean OR)
and Λογικό ΚΑΙ (Boolean AND)
not x Λογικό ΌΧΙ (Boolean NOT)
in, not in Έλεγχοι συμμετοχής (Membership tests)
is, is not Έλεγχοι ταυτότητας (Identity tests)
<, <=, >, >=, !=, == Συγκρίσεις
| Δυαδικό Ή (Bitwise OR)
^ Δυαδικό Αποκλειστικό Ή (Bitwise XOR)
& Δυαδικό ΚΑΙ (Bitwise AND)
<<, >> Μεταθέσεις (Shifts)
+, - Πρόσθεση και αφαίρεση
*, /, //, % Πολλαπλασιασμός, Διαίρεση, Διαίρεση στρογγυλοποιημένη προς τα κάτω, Υπόλοιπο
+x, -x Θετικό, αρνητικό
~x Δυαδικό ΌΧΙ (Bitwise NOT)
** Ύψωση σε δύναμη
x.attribute Αναφορά σε χαρακτηριστικό
x[index] Subscription
x[index1:index2] Κομμάτιασμα (Slicing)
f(arguments ...) Κλήση συνάρτησης
(expressions, ...) Συνένωση ή εμφάνιση tuple
[expressions, ...] Συνένωση ή εμφάνιση λίστας
{key:datum, ...} Συνένωση ή εμφάνιση λεξικού
Οι τελεστές τους οποίους δεν έχουμε ακόμη συναντήσει θα εξηγηθούν σε επόμενα κεφάλαια.
Τελεστές με την ίδια προτεραιότητα βρίσκονται στην ίδια γραμμή στον παραπάνω πίνακα. Για παράδειγμα, το + και το - έχουν την ίδια προτεραιότητα.
Αλλάζοντας τη Σειρά Υπολογισμού
Για να κάνουμε τις εκφράσεις πιο ευανάγνωστες, μπορούμε να χρησιμοποιήσουμε παρενθέσεις. Για παράδειγμα, το 2 + (3 * 4) είναι σίγουρα πιο εύκολο να το καταλάβουμε από το 2 + 3 * 4 το οποίο απαιτεί τη γνώση των προτεραιοτήτων των τελεστών. Όπως και όλα τα άλλα, οι παρενθέσεις θα πρέπει να χρησιμοποιούνται με σύνεση (μην το παρακάνετε) και να μην είναι άχρηστες (όπως π.χ. στο 2 + (3 + 4) ).
Υπάρχει ένα επιπλέον πλεονέκτημα στη χρήση παρενθέσεων - μας βοηθά να αλλάξουμε τη σειρά υπολογισμού. Για παράδειγμα, αν θέλετε να γίνει η πρόσθεση πριν τον πολλαπλασιασμό σε μία έκφραση, τότε μπορείτε να γράψετε κάτι όπως (2 + 3) * 4.
Συσχέτιση
Οι τελεστές συνήθως συσχετίζονται από τα αριστερά προς τα δεξιά δηλ. οι τελεστές με την ίδια προτεραιότητα υπολογίζονται από τα αριστερά προς τα δεξιά. Για παράδειγμα, το 2 + 3 + 4 υπολογίζεται ως (2 + 3) + 4. Μερικοί τελεστές όπως οι τελεστές ανάθεσης έχουν συσχέτιση από τα δεξιά προς τα αριστερά δηλ. το a = b = c αντιμετωπίζεται ως a = (b = c).
Εκφράσεις
Παράδειγμα:
#!/usr/bin/python
# Όνομα αρχείου: expression.py
length = 5
breadth = 2
area = length * breadth
print('Area is', area)
print('Perimeter is', 2 * (length + breadth))
Αποτέλεσμα:
$ python expression.py
Area is 10
Perimeter is 14
Πως Δουλεύει
Το μήκος (length) και το πλάτος (breadth) του ορθογωνίου αποθηκεύονται σε μεταβλητές με το ίδιο όνομα. Χρησιμοποιούμε αυτές τις μεταβλητές για να υπολογίσουμε το εμβαδόν και την περίμετρο του ορθογωνίου με τη βοήθεια εκφράσεων. Αποθηκεύουμε το αποτέλεσμα της έκφρασης length * breadth στη μεταβλητή area και έπειτα το τυπώνουμε χρησιμοποιώντας τη συνάρτηση print. Στή δεύτερη περίπτωση, χρησιμοποιούμε απ' ευθείας την τιμή της έκφρασης 2 * (length + breadth) στη συνάρτηση print.
Επίσης, παρατηρήστε τον τρόπο με τον οποίο η Python "τυπώνει όμορφα" τα αποτελέσματα. Παρ' όλο που δεν έχουμε καθορίσει ένα κενό ανάμεσα στο "Area is" και στη μεταβλητή area, η Python το τοποθετεί για εμάς έτσι ώστε να πάρουμε μία πιο καθαρή όμορφη έξοδο (αποτέλεσμα) και το πρόγραμμα είναι πολύ πιο ευανάγνωστο με αυτό τον τρόπο (αφού δε χρειάζεται να ανησυχούμε για τα κενά στις συμβολοσειρές που χρησιμοποιούμε για έξοδο). Αυτό είναι ένα παράδειγμα του πώς η Python κάνει τη ζωή του προγραμματιστή εύκολη.
Σύνοψη
Είδαμε πως χρησιμοποιούμε τους τελεστές, τους τελεστέους και τις εκφράσεις - αυτά αποτελούν τα βασικά δομικά στοιχεία κάθε προγράμματος. Στη συνέχεια, θα δούμε πως τα χρησιμοποιούμε στα προγράμματά μας χρησιμοποιώντας εντολές.
ΛΕΙΤΟΥΡΓΙΕΣ (FUNCTIONS)
ΕΙΣΑΓΩΓΗ
Οι “ΛΕΙΤΟΥΡΓΙΕΣ” είναι επαναχρησιμοποιήσιμα μέρη προγραμμάτων.Σου δίνουν τη δυνατότητα να δίνεις ένα όνομα σε ένα κομμάτι δηλώσεων ,έτσι ώστε να τρέχεις αυτό το κομμάτι οπουδήποτε στο προγραμμά σου και όσες φορές θέλεις,χρησιμοποιώντας αυτό το όνομα.Αυτό είναι γνωστό σαν “κλήση” (calling) της λειτουργίας.Εχουμε ήδη χρησιμοποιήσει πολλές ενσωματωμένες λειτουργίες όπως τη len και τη range.Η έννοια της λειτουργίας είναι πιθανόν το πιο σπουδαίο ενσωματωμένο κομμάτι,από κάθε άλλο μη τετριμμένο λειτουργικό (σε όλες τις γλώσσες προγραμματισμού),γι αυτό θα διερευνήσουμε διάφορες πτυχές των λειτουργιών σε αυτό το κεφάλαιο.
Οι λειτουργίες ορίζονται χρησιμοποιώντας τη λέξη κλειδί def , μετά την οποία ακολουθεί ενα όνομα που ταυτοποιεί την εκάστοτε λειτουργία και κατόπιν ακολουθεί ένα ζευγάρι παρενθέσεων που μπορούν να περικλείουν ονόματα μεταβλητών και η γραμμή τελειώνει με άνω-κατω τελείες.
Παρακάτω υπάρχει ένα απλό παράδειγμα με ένα κομμάτι δηλώσεων που αποτελούν μερος της λειτουργίας με το όνομα say Hello
#!/usr/bin/python
# Filename: function1.py
def sayHello():
print('Hello World!')#κομμάτι δηλώσεων που ανήκει στη λειτουργία say Hello
# Tέλος της λειτουργίας
sayHello() # καλείς τη λειτουργία
sayHello() # καλείς τη λειτουργία πάλι
Εξοδος:
$ python function1.py
Hello World!
Hello World!
Επεξήγηση:
Oρίζουμε μια λειτουργία με το όνομα sayHello ακολουθώντας τη σύνταξη όπως εξηγήσαμε παραπάνω.Αυτή η λειτουργία δεν έχει παραμέτρους γι αυτό δεν έχει καθόλου μεταβλητές ανάμεσα στις παρενθέσεις.Οι παράμετροι στη λειτουργία είναι μόνο εισαγωγή στη λειτουργία έτσι ώστε να θέτεις διαφορετικές τιμές στη λειτουργία και να παίρνεις αντίστοιχα αποτελέσματα.
ΣΗΜΕΙΩΣΗ:Μπορεις να καλείς την ιδια λειτουργία δύο φορές δηλ. δεν χρειάζεται να γράφεις κώδικα δύο φορές.
Λειτουργικό: Ubuntu 10.04 lucid 64-bit | Προδιαγραφές: 4x Intel Core i5 CPU M 450 2.40GHz ‖ RAM 3696 MiB ‖ Lenovo KL3 - LENOVO IdeaPad Y560 |
Κάρτα γραφικών: ATI Device [1002:68c0] | Ασύρματο: wlan0: Atheros Inc. AR928X Wireless Network Adapter (PCI-Express) [168c:002a] (rev 01) |
logari81 έγραψε:Declaration -- Ορισμος