האמת והשקר ב-`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 בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.