מתקדם > זרימת התכנית > אופרטורים בוליאניים

ההתנהגות המיוחדת של and  ו-or בפייתון

בפייתון, and ו-or מבצעות את הלוגיקה הבוליאנית הרגילה שלהם, אולם הם לא מחזירים ערכים בוליאנים מייצגים כגון 0 ו-1. במקום זאת הם מחזירים אחד מבין הערכים המושווים.

And

>>> 'a' and 'b'
'b'

>>> '' and 'b'
''
>>> 'a' and 'b' and 'c'
'c'

העבירו את העכבר על שורות הקוד המסומנות כדי לקבל הסברים

Or

>>> 'a' or 'b'
'a'
>>> '' or 'b'
'b'

>>> '' or [] or {}
{}

>>>
def sidefx():
...
print "in sidefx()"
...
return 1
>>> 'a' or sidefx()
'a'

העבירו את העכבר על שורות הקוד המסומנות כדי לקבל הסברים

תחליף למבנה- x?y:z מ-C

מתכנתי ה-C שביניכם מכירים בוודאי את המבנה bool ? a : b, שמשתערך ל-a אם bool אמיתי, ול-b אם הוא שיקרי.  פייתון לא מכירה את הביטוי הזה, אולם בגלל התנהגותם המיוחדת של and ושל or בשפה, ניתן להשיג באמצעותם את אותו הדבר. התבוננו בדוגמה הבאה:

>>> a = "first"
>>> b = "second"

>>> 1 and a or b
'first'

>>> 0 and a or b
'second'   

העבירו את העכבר על שורות הקוד המסומנות כדי לקבל הסברים

יש לשים לב לכך שאם ערכו של a הוא שיקרי, הטריק הזה לא עובד...

>>> a = ""
>>> b = "second"

>>> 1 and a or b
'second'

האם את/ה יכול/ה לגלות מדוע?

כדי להימנע מבעיה זו, ניתן להשתמש בצורה הבטוחה של הטריק כך:

>>> a = ""
>>> b = "second"

>>> (1
and [a] or [b])[0]
''

 
עמוד ראשי
הקדמה
התקנה
שימוש
התחלה
פונקציות
זרימת התכנית
טיפוסי נתונים
זרימת התכנית - מתקדם
תכנות מונחה עצמים
מודולים
כללי
שלבי הפרויקט
דוגמאות הרצה