Οι λογικοί τελεστές της Python and, or, and not (λογική σύζευξη, διάζευξη, άρνηση)

Επιχείρηση

Η Python παρέχει λογικούς τελεστές για την εκτέλεση λογικών (Boolean) πράξεων.(and,or,not)
Χρησιμοποιείται για να περιγράψει τη σχέση μεταξύ πολλαπλών συνθηκών σε μια δήλωση if.

Αυτή η ενότητα περιγράφει τα εξής.

  • διασταύρωση: and
  • λογική προσθήκη: or
  • άρνηση: not
  • and,or,notΠροτεραιότητα χειριστή

Επιπλέον, επεξηγούνται τα ακόλουθα σημεία ως προειδοποιήσεις.

  • Λογικοί τελεστές για αντικείμενα άλλου τύπου εκτός του bool
  • and,orΑυτές οι τιμές επιστροφής δεν είναι απαραίτητα τύπου bool.
  • Βραχυκύκλωμα (αξιολόγηση βραχυκυκλώματος)

διασταύρωση: and

και επιστρέφει το λογικό γινόμενο δύο τιμών.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

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

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

και μπορούν να συνδεθούν ως εξής.

print(0 < a < 100)
# True

λογική προσθήκη: or

ή επιστρέφει το λογικό Ή των δύο τιμών.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

άρνηση: not

not» επιστρέφει την άρνηση της τιμής- το true και το false αντιστρέφονται.

print(not True)
# False

print(not False)
# True

and,or,notΠροτεραιότητα χειριστή

Η σειρά προτεραιότητας αυτών των λογικών τελεστών έχει ως εξής: το not είναι το υψηλότερο.

  1. not
  2. and
  3. or

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

print(True or True and False)
# True

print(True or (True and False))
# True

Αν θέλετε να χρησιμοποιήσετε το ή πριν από το και, χρησιμοποιήστε τις παρενθέσεις().

print((True or True) and False)
# False

<,>Αυτοί οι τελεστές σύγκρισης έχουν ακόμη μεγαλύτερη προτεραιότητα από ό,τι δεν έχουν. Επομένως, οι παρενθέσεις δεν είναι απαραίτητες για κάθε πράξη σύγκρισης, όπως συνέβαινε στο παραπάνω παράδειγμα.

print(0 < a and a < 100)
# True

Δείτε την επίσημη τεκμηρίωση παρακάτω για μια περίληψη της προτεραιότητας των τελεστών στην Python.

Λογικοί τελεστές για αντικείμενα άλλου τύπου εκτός του bool

Με αυτούς τους λογικούς τελεστές, όχι μόνο οι τύποι bool (true, false), αλλά και οι αριθμοί, οι συμβολοσειρές, οι λίστες κ.λπ. επεξεργάζονται ως τιμές boolean.

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

  • Σταθερές που ορίζονται ως ψευδείς: None,false
  • Μηδέν σε αριθμητικούς τύπους: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Κενή ακολουθία ή συλλογή: '',(),[],{},set(),range(0)

Όλες οι άλλες τιμές θεωρούνται αληθείς.

Η συνάρτηση bool() μπορεί να χρησιμοποιηθεί για να λάβετε την boolean τιμή ενός αντικειμένου. Σημειώστε ότι η συμβολοσειρά '0' ή 'False' θεωρείται αληθής.

print(bool(10))
# True

print(bool(0))
# False

print(bool(''))
# False

print(bool('0'))
# True

print(bool('False'))
# True

print(bool([]))
# False

print(bool([False]))
# True

Για να χειριστείτε το '0' ή το 'false' σε μια συμβολοσειρά ως false, χρησιμοποιήστε την distutils.util.strtobool().

and,orΑυτές οι τιμές επιστροφής δεν είναι απαραίτητα τύπου bool.

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

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Όπως μπορείτε να δείτε από το παραπάνω παράδειγμα, τα and και or στην Python δεν επιστρέφουν true ή false του τύπου bool, αλλά επιστρέφουν την τιμή αριστερά ή δεξιά ανάλογα με το αν είναι true ή false. Το παράδειγμα είναι αριθμητικό, αλλά το ίδιο ισχύει και για άλλους τύπους, όπως συμβολοσειρές και λίστες. Παρεμπιπτόντως, η not επιστρέφει true ή false του τύπου bool.

Οι ορισμοί των τιμών επιστροφής των and και or έχουν ως εξής.

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

6.11. Boolean operations — Expressions — Python 3.10.1 Documentation

Όταν οι τιμές της αριστερής και της δεξιάς έκφρασης είναι true και false ξεχωριστά, οι τιμές επιστροφής είναι εύκολα κατανοητές. Από την άλλη πλευρά, εάν και οι δύο είναι αληθείς ή και οι δύο είναι ψευδείς, η τιμή επιστροφής θα είναι διαφορετική ανάλογα με τη σειρά.

Αν τη χρησιμοποιήσετε ως έκφραση υπό συνθήκη σε μια εντολή if κ.λπ., το αποτέλεσμα κρίνεται ως τιμή boolean και επεξεργάζεται, οπότε δεν χρειάζεται να ανησυχείτε γι' αυτό, αλλά αν χρησιμοποιήσετε την τιμή επιστροφής για περαιτέρω επεξεργασία, πρέπει να είστε προσεκτικοί.

x = 10  # True
y = 100  # True

print(x and y)
# 100

print(y and x)
# 10

print(x or y)
# 10

print(y or x)
# 100
x = 0  # False
y = 0.0  # False

print(x and y)
# 0

print(y and x)
# 0.0

print(x or y)
# 0.0

print(y or x)
# 0

print(bool(x and y))
# False

Αν θέλετε να το χειριστείτε ως αληθές ή ψευδές, μπορείτε να το κάνετε όπως στο τελευταίο παράδειγμα.
bool(x and y)

Οι τιμές επιστροφής των and και or συνοψίζονται στον παρακάτω πίνακα.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Βραχυκύκλωμα (αξιολόγηση βραχυκυκλώματος)

Όπως μπορείτε να δείτε από τον παραπάνω πίνακα, αν το x είναι ψευδές στα x και y ή αν το x είναι αληθές στα x ή y, η τιμή επιστροφής θα είναι x ανεξάρτητα από την τιμή του y.

Σε μια τέτοια περίπτωση, το y δεν αξιολογείται.

and,orΣημειώστε ότι αν καλέσετε μια συνάρτηση ή μέθοδο στη δεξιά πλευρά αυτών των διεργασιών για να κάνετε κάποια επεξεργασία, η διεργασία ενδέχεται να μην εκτελεστεί ανάλογα με το αποτέλεσμα στην αριστερή πλευρά.

def test():
    print('function is called')
    return True

print(True and test())
# function is called
# True

print(False and test())
# False

print(True or test())
# True

print(False or test())
# function is called
# True
Copied title and URL