האמת והשקר ב-`truthy` ו-`falsy` בפייתון
מאמר זה מסביר את המושגים truthy
ו-falsy
בפייתון.
YouTube Video
האמת והשקר ב-truthy
ו-falsy
בפייתון
הגדרת המושגים truthy
ו-falsy
בפייתון, אובייקטים המוערכים בביטויים מותנים מוגדרים כהצלחה ('True') או ככישלון ('False'). truthy
מתייחס לאובייקטים המוערכים כ-'True', ו-falsy
מתייחס לאלו המוערכים כ-'False'. הערכות אלו משמשות לרוב בענפים מותנים כמו ביטויי if
או לולאות while
. בנוסף, הפונקציה bool()
מקבלת כל אובייקט ומחזירה את ערכו הבוליאני.
falsy
(אובייקטים המוערכים כ-False)
בפייתון, האובייקטים הבאים נחשבים ל-falsy
:.
-
שקר
-
כלום
-
ערכי אפס מספריים
- דוגמה:
0
,0.0
- דוגמה:
-
סוגי רצפים ריקים (כמו רשימות ריקות, טאפלים ריקים או מיתרים ריקים)
- דוגמה:
[]
,()
,""
- דוגמה:
-
מילון ריק
- דוגמה:
{}
- דוגמה:
-
מערכת ריקה
- דוגמה:
set()
- דוגמה:
עצמים אלה מוערכים כ'שקריים' כאשר משתמשים בהם בתנאי של משפט if
. לדוגמה, אתה יכול לכתוב קוד כזה.
1if not []:
2 print("The list is falsy.")
- בקוד זה, הרשימה
[]
ריקה, ולכן היא מוערכת כשקרית
, ומשפט ה-print
מבוצע.
truthy
(אובייקטים המוערכים כ-True)
אובייקטים שאינם נחשבים ל-falsy
נחשבים ל-truthy
.
-
מספרים שאינם אפס (שלמים, מספרים עשרוניים)
- דוגמאות:
1
,3.14
,-100
- דוגמאות:
-
סוגי רצף שאינם ריקים (רשימות, קוורטטות, מחרוזות, וכו')
- דוגמאות:
[1, 2, 3]
,(1, 2)
,"שלום"
- דוגמאות:
-
מילונים שאינם ריקים
- דוגמה:
{"מפתח": "ערך"}
- דוגמה:
-
קבוצות שאינן ריקות
- דוגמה:
{1, 2, 3}
- דוגמה:
אובייקטים שנחשבים ל-truthy
יוערכו כ-'True' כאשר הם נמצאים בתנאי של ביטוי if
. לדוגמה, אתה יכול לכתוב קוד כזה.
1if [1, 2, 3]:
2 print("The list is truthy.")
- בקוד למעלה, מכיוון שהרשימה
[1, 2, 3]
אינה ריקה, היא מוערכת כ-truthy
והפקודהprint
מתבצעת.
הערכת ערך בוליאני באמצעות הפונקציה bool()
ניתן להעריך את הערך הבוליאני של אובייקטים בעזרת הפונקציה bool()
.
1# Examples of falsy values
2print("False is", "truthy" if bool(False) else "falsy")
3print("0 is", "truthy" if bool(0) else "falsy")
4print('"" is', "truthy" if bool("") else "falsy")
5print("None is", "truthy" if bool(None) else "falsy")
6print("[] is", "truthy" if bool([]) else "falsy")
7
8# Examples of truthy values
9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
- הקוד הזה מדגים כיצד ערך האמת של ערכים שונים מוערך. לדוגמה, הערך המספרי
0
ומחרוזת ריקה נחשבים ל־False, בעוד שרווח או המחרוזת"0"
נחשבים ל־True.
שימוש ב-truthy
וב-falsy
על ידי שימוש ב-truthy
וב-falsy
, ניתן לכתוב קוד באופן תמציתי ואינטואיטיבי יותר. במיוחד, ניתן לעיתים להעריך משפטי if
ללא השוואות מפורשות כדי לקצר אותם. לדוגמה, שני קטעי הקוד הבאים מתנהגים באופן דומה, אך הראשון תמציתי יותר.
1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5 print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9 print("The list is not empty.")
בדוגמה למעלה, ניתן לראות ש-my_list
מוערכת כ-truthy
כל עוד היא אינה רשימה ריקה, מה שמבטל את הצורך בהשוואה מפורשת.
תכנון עם truthy
ו-falsy
באמצעות שימוש יעיל במושגי truthy
ו-falsy
, ניתן לשפר את קריאות ויעילות הקוד. הם שימושיים במיוחד לקביעת ערכי ברירת מחדל, בדיקת חוקיות משתנים, ולאימות קלט. לדוגמה, אם אתה מצפה שNone
או רשימה ריקה יעברו כארגומנט, תוכל לכתוב קוד כזה.
1def process_data(data=None):
2 data = data or []
3 print(data)
4
5process_data() # An empty list is used by default.
- בקוד הזה, אם
data
הואNone
, רשימה ריקה[]
מוגדרת כברירת מחדל. באופן זה, שימוש ב-truthy
ו-falsy
מאפשר להגדיר ערכי ברירת מחדל בצורה תמציתית.
נקודות שכדאי לשים לב אליהן כדי להימנע מהתנהגות לא צפויה
עם זאת, למרות שקוד שמשתמש בערכי truthy
ו-falsy
יכול להיות תמציתי ונוח, כדאי לשים לב שהוא עלול לגרום להתנהגות לא צפויה. לדוגמה, בקוד הזה, לא רק כאשר data
הוא None
, אלא גם כאשר הוא כל ערך שמוערך כ-False
כמו מחרוזת ריקה או 0
, הוא יוחלף כברירת מחדל לרשימה ריקה []
. מהסיבה הזאת, כאשר נדרש תנאי מחמיר יותר, כמו אתחול רק כאשר הערך הוא None
, מומלץ להשתמש בתנאי מפורש כמו value is None:
. בהתאם לסיטואציה, חשוב לבנות את הקוד תוך איזון בין תמציתיות לבין קפדנות.
1def process_data(data=None):
2 if data is None:
3 data = []
4 print(data)
5
6process_data() # An empty list is used by default.
7process_data(0) # 0 is printed because it's not None.
- בקוד הזה, הערך
data
מאותחל לרשימה ריקה רק אם הואNone
, בעוד שערכים כוזבים אחרים כמו0
נשארים כפי שהם.
שליטה בערך בוליאני באובייקטים מותאמים אישית
גם במחלקות משלך, ניתן לשלוט בערך הבוליאני של מופע ע"י הגדרת __bool__()
או __len__()
.
1class MyContainer:
2 def __init__(self, items):
3 self.items = items
4
5 def __len__(self):
6 return len(self.items)
7
8box = MyContainer([])
9print(bool(box)) # False
10
11box.items.append("item")
12print(bool(box)) # True
- בקוד הזה, המתודה
__len__()
גורמת למיכל להיות מוערך כ-False
כאשר הוא ריק וכ-True
כאשר יש בו איברים.
סיום
המושגים של truthy
ו-falsy
בפייתון חשובים מאוד לכתיבת ביטויי תנאי תמציתיים ולהפיכת הקוד לאינטואיטיבי יותר. הבנה ושימוש נכון במושגים אלו יכולים לשפר באופן משמעותי את קריאות הקוד ואת היעילות שלו.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.