האמת והשקר ב-`truthy` ו-`falsy` בפייתון

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

YouTube Video