Menu

אופרטורים ב-Python: אריתמטיים, השוואה, לוגיים, שייכות וזהות

סיור מלא באופרטורים של Python: אריתמטיים, השוואה, לוגיים, השמה, שייכות וזהות, עם דוגמה לכל אחד.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

אופרטורים הם פשוט סימנים לפעולות

אופרטור הוא סימן (או מילת מפתח קצרה) שאומר ל-Python לעשות משהו עם ערך אחד או שניים: לחבר אותם, להשוות ביניהם, לבדוק אם אחד מכיל את השני. כמה מהם אתם כבר מכירים מחשבון בסיסי, ול-Python יש עוד כמה ללוגיקה, להכלה ולזהות.

נעבור על הקטגוריות העיקריות אחת אחת.

אופרטורים אריתמטיים

אופרטורי החשבון הסטנדרטיים, ועוד כמה מיוחדים של Python:

שני פריטים ברשימה הזו קל לשכוח:

  • / מחזיר float גם כששני הצדדים מספרים שלמים. 10 / 2 נותן 5.0. לחילוק שלם, השתמשו ב-//.
  • % הוא מודולו. n % 2 == 0 היא הדרך הנקייה ביותר לבדוק אם n זוגי.

Python פועלת לפי סדר הפעולות המתמטי הסטנדרטי: ** נקשר חזק יותר מ-* ו-/, שנקשרים חזק יותר מ-+ ו--. סוגריים גוברים על הכול:

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

אופרטורי השוואה

שש השוואות, שכל אחת מהן מחזירה ערך בוליאני:

Python מאפשרת לשרשר השוואות, וזה לא שגרתי ושימושי:

זה נקרא "age הוא לפחות 18 ופחות מ-65". מאחורי הקלעים זה שקול ל-18 <= age and age < 65, אבל זה נקרא יותר כמו מתמטיקה.

אופרטורים לוגיים

נכתבים כמילים באנגלית, לא כסימנים:

שני פרטים שכדאי להכיר:

קיצור הערכה (short-circuit). and עוצר בערך ה-falsy הראשון, ו-or עוצר בערך ה-truthy הראשון. הצד השני אפילו לא מוערך אם הצד הראשון כבר הכריע את התשובה. זה מאפשר להתגונן מפני שגיאות בבטחה:

and/or מחזירים את הערך, לא תמיד True/False. הם מחזירים את האופרנד שהכריע את התוצאה:

תראו בקוד אמיתי name = user_input or "anonymous": זה דפוס של ערך ברירת מחדל שמבוסס על ההתנהגות הזו.

לכללים המלאים של שלושת האופרטורים האלה, כולל אילו ערכים נחשבים falsy, מה הקדימות של not, and ו-or זה מול זה, ולמה and אינו אותו דבר כמו &, ראו את and, or, not ב-Python.

אופרטורי השמה

= מבצע השמה. הצורות המורכבות משלבות פעולה עם השמה:

הצורות המורכבות עובדות גם עם מחרוזות (s += "more") ועם רשימות (lst += [4, 5]). הן לא מהירות יותר מהכתיבה המלאה, רק קצרות יותר.

שייכות: in ו-not in

בודקים אם ערך מופיע בתוך מכולה:

in עובד על כל iterable: רשימות, tuples, sets, מחרוזות, dicts ועוד. בחיפושים גדולים, in על רשימה הוא O(n), ו-in על set או dict הוא O(1). זה משנה ברגע שבודקים שייכות פעמים רבות.

זהות: is ו-is not

is בודק אם שני משתנים מצביעים על אותו אובייקט בזיכרון, ולא רק על ערכים שווים:

כמעט תמיד רוצים ==. המקום היחיד שבו is באמת מצטיין הוא בדיקה מול None, True ו-False:

המוסכמה בקהילה נחרצת: is None, לא == None. אותו דבר לגבי is True (אם כי כמעט אף פעם לא צריך את זה).

אופרטורי ביטים (דלגו על זה בקריאה ראשונה)

ל-Python יש גם אופרטורי ביטים, &, |, ^, ~, <<, >>, לשינוי ביטים בודדים של מספר שלם. הם שימושיים בקריפטוגרפיה, בתקשורת רשת ברמה נמוכה ובאלגוריתמים מסוימים. בקריאה ראשונה אפשר להתעלם מהם בבטחה.

אופרטור ה-Walrus (:=)

Python 3.8 הוסיפה את :=, שמבצע השמה וגם מחזיר ערך בביטוי אחד. שימושי בתנאים שבהם רוצים גם לשמור תוצאה וגם לבדוק אותה:

בלי ה-walrus הייתם קוראים ל-len(numbers) פעמיים או מוסיפים שורה. הוא לא הכרחי: השתמשו בו כשהוא מצמצם חזרות.

דף עזר לקדימות אופרטורים

מהקשירה החזקה ביותר לחלשה ביותר, עבור האופרטורים שתשתמשו בהם בפועל:

  1. **: חזקה
  2. *, /, //, %: כפל וחילוק
  3. +, -: חיבור וחיסור
  4. <, <=, >, >=, ==, !=: השוואות
  5. not
  6. and
  7. or

כשיש ספק, הוסיפו סוגריים. בהירות עדיפה על תחכום.

שאלות נפוצות

מהם סוגי האופרטורים העיקריים ב-Python?

אריתמטיים (+, -, *, /, //, %, **), השוואה (==, !=, <, <=, >, >=), לוגיים (and, or, not), השמה (=, +=, -=, …), שייכות (in, not in) וזהות (is, is not).

מה ההבדל בין == ל-is ב-Python?

== בודק אם שני ערכים שווים. is בודק אם שני משתנים מפנים בדיוק לאותו אובייקט בזיכרון. עבור None, True ו-False השתמשו ב-is, כי הם singletons. לכל השאר, == הוא כמעט תמיד מה שאתם רוצים.

מה עושה האופרטור % ב-Python?

עבור מספרים, % הוא אופרטור המודולו: הוא מחזיר את השארית של חילוק. 17 % 5 הוא 2. עבור מחרוזות זהו תחביר עיצוב בסגנון ישן (כמו "hello %s" % name), אבל f-strings כמעט החליפו אותו לגמרי.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל