Προτεραιότητα και συσχέτιση των χειριστών στην Python

Σε αυτό το σεμινάριο, θα μάθετε πώς η προτεραιότητα και η συσχέτιση των χειριστών επηρεάζουν τη σειρά των λειτουργιών στο Python.

Προτεραιότητα των χειριστών Python

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

Για παράδειγμα:

 >>> 5 - 7 -2

Εδώ 5 - 7είναι μια έκφραση. Μπορεί να υπάρχουν περισσότεροι από ένας τελεστές σε μια έκφραση.

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

Για παράδειγμα, ο πολλαπλασιασμός έχει μεγαλύτερη προτεραιότητα από την αφαίρεση.

 # Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2

Αλλά μπορούμε να αλλάξουμε αυτήν τη σειρά χρησιμοποιώντας παρενθέσεις ()καθώς έχει μεγαλύτερη προτεραιότητα από τον πολλαπλασιασμό.

 # Parentheses () has higher precedence >>> (10 - 4) * 2 12

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

Χειριστές Εννοια
() Παρενθέσεις
** Εκθέτης
+x, -x,~x Unary plus, Unary μείον, Bitwise ΟΧΙ
*, /, //,% Πολλαπλασιασμός, διαίρεση, διαίρεση δαπέδου, συντελεστής
+, - Προσθήκη, αφαίρεση
<<, >> Τελεστές μετατόπισης bitwise
& Bitwise ΚΑΙ
^ Bitwise XOR
| Bitwise Ή
==, !=, >, >=, <, <=, is, is not, in,not in Συγκρίσεις, ταυτότητα, τελεστές ιδιότητας μέλους
not Λογικά ΟΧΙ
and Λογική ΚΑΙ
or Λογική Ή

Ας δούμε μερικά παραδείγματα:

Ας υποθέσουμε ότι κατασκευάζουμε ένα if… elseμπλοκ που λειτουργεί ifόταν το μεσημεριανό γεύμα είναι είτε φρούτο είτε σάντουιτς και μόνο εάν τα χρήματα είναι περισσότερα από ή ίσα με 2.

 # Precedence of or & and meal = "fruit" money = 0 if meal == "fruit" or meal == "sandwich" and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Παραγωγή

 Παράδοση γεύματος

Αυτό το πρόγραμμα λειτουργεί ifμπλοκ ακόμα και όταν τα χρήματα είναι 0. Δεν μας δίνει την επιθυμητή έξοδο, δεδομένου ότι η προτεραιότητα andείναι υψηλότερη από or.

Μπορούμε να πάρουμε την επιθυμητή έξοδο χρησιμοποιώντας παρένθεση ()με τον ακόλουθο τρόπο:

 # Precedence of or & and meal = "fruit" money = 0 if (meal == "fruit" or meal == "sandwich") and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Παραγωγή

 Δεν είναι δυνατή η παράδοση μεσημεριανού γεύματος

Συνεργασία των χειριστών Python

Μπορούμε να δούμε στον παραπάνω πίνακα ότι υπάρχουν περισσότεροι από ένας χειριστές στην ίδια ομάδα. Αυτοί οι χειριστές έχουν την ίδια προτεραιότητα.

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

Η συσχέτιση είναι η σειρά στην οποία αξιολογείται μια έκφραση που έχει πολλούς τελεστές της ίδιας προτεραιότητας. Σχεδόν όλοι οι χειριστές έχουν σχέση αριστερά προς δεξιά.

Για παράδειγμα, ο πολλαπλασιασμός και η διαίρεση δαπέδου έχουν την ίδια προτεραιότητα. Ως εκ τούτου, εάν και οι δύο είναι παρόντες σε μια έκφραση, η αριστερή αξιολογείται πρώτα.

 # Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))

Παραγωγή

 3 0

Σημείωση : Ο εκθεσιακός χειριστής **έχει σχέση από αριστερά προς τα αριστερά στο Python

 # Shows the right-left associativity of ** # Output: 512, Since 2**(3**2) = 2**9 print(2 ** 3 ** 2) # If 2 needs to be exponated fisrt, need to use () # Output: 64 print((2 ** 3) ** 2)

Μπορούμε να δούμε ότι 2 ** 3 ** 2ισοδυναμεί με 2 ** (3 ** 2).

Μη συνεργαζόμενοι χειριστές

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

Για παράδειγμα, x < y < zούτε σημαίνει (x < y) < zούτε x < (y < z). x < y < zείναι ισοδύναμο με x < y and y < z, και αξιολογείται από αριστερά προς δεξιά.

Επιπλέον, ενώ η αλυσίδα αναθέσεων όπως x = y = z = 1είναι απολύτως έγκυρη, x = y = z+= 2θα οδηγήσει σε σφάλμα.

 # Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2

Παραγωγή

 Αρχείο "", γραμμή 8 x = y = z + = 2 Σύνταξη Σφάλμα: μη έγκυρη σύνταξη

ενδιαφέροντα άρθρα...