Η 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 είναι το υψηλότερο.
not
and
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 συνοψίζονται στον παρακάτω πίνακα.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Βραχυκύκλωμα (αξιολόγηση βραχυκυκλώματος)
Όπως μπορείτε να δείτε από τον παραπάνω πίνακα, αν το 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