אופרטורים הם פשוט סימנים לפעולות
אופרטור הוא סימן (או מילת מפתח קצרה) שאומר ל-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) פעמיים או מוסיפים שורה. הוא לא הכרחי: השתמשו בו כשהוא מצמצם חזרות.
דף עזר לקדימות אופרטורים
מהקשירה החזקה ביותר לחלשה ביותר, עבור האופרטורים שתשתמשו בהם בפועל:
**: חזקה*,/,//,%: כפל וחילוק+,-: חיבור וחיסור<,<=,>,>=,==,!=: השוואותnotandor
כשיש ספק, הוסיפו סוגריים. בהירות עדיפה על תחכום.
שאלות נפוצות
מהם סוגי האופרטורים העיקריים ב-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 כמעט החליפו אותו לגמרי.