Menu

f-Strings ב-Python: עיצוב מחרוזות, ביטויים ועיצוב מספרים

מדריך מעשי ל-f-strings ב-Python: שילוב משתנים וביטויים, עיצוב מספרים ותאריכים, ומתי לפנות לסגנונות העיצוב הישנים.

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

הפורמט שבו באמת תשתמשו

f-strings הן הדרך המקובלת בקוד Python מודרני לשלב ערכים בתוך טקסט. שימו f לפני המירכאות הפותחות, וכל מה שבתוך {...} הופך לביטוי חי:

שלושה דברים ששווה לשים לב אליהם. הקידומת f הופכת את כל הליטרל לתבנית. הסוגריים המסולסלים הם נקודות ההחלפה. והביטוי שבתוך הסוגריים מחושב ברגע ש-print רצה, לא כשהמחרוזת נכתבה.

תכתבו f-strings הרבה יותר מכל סגנון עיצוב אחר. הן קצרות יותר מ-"Hello, " + name + ".", ברורות יותר מ-"Hello, %s." % name, וגמישות יותר מ-.format().

כל מה שמחושב יכול להיכנס פנימה

הסוגריים לא מוגבלים לשמות משתנים. כל ביטוי Python כשר:

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

עיצוב מספרים

נקודתיים אחרי הביטוי פותחות מפרט פורמט (format spec): שפה קטנה לשליטה באופן שבו הערך מוצג:

מדריך מהיר למה שכל חלק עושה:

  • .2f: float, שתי ספרות אחרי הנקודה. מעגל לתצוגה.
  • ,: פסיק כמפריד אלפים. עובד עם int ועם float.
  • .1%: כפל ב-100 והוספת %. מצוין ליחסים ולשיעורים.
  • .2e: כתיב מדעי עם שתי ספרות עשרוניות.

אפשר לשלב ביניהם. f"{total:,.2f}" נותן "1,234.57".

ריפוד, רוחב ויישור

ליישור עמודות בפלט:

<10 פירושו "יישור לתחילת השדה, עם ריפוד לפחות ל-10 תווים". >5 פירושו "יישור לסוף השדה, עם ריפוד ל-5". אפשר גם להשתמש ב-^ למרכוז.

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

עיצוב תאריכים

אותו תחביר {value:spec} עובד גם עם אובייקטי datetime:

המפרט אחרי הנקודתיים הוא מחרוזת פורמט של strftime. כל קוד % שזמין ל-strftime עובד כאן: נכסה אותם בפירוט בעמוד על datetime.

הטריק של = לדיבוג

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

מקבלים count=7, price=19.99, count * price=139.93. זה print("count =", count) מלא בשלושה תווים. שווה לזכור בפעם הבאה שאתם מדבגים ורוצים לשפוך כמה ערכים.

Escape לסוגריים מסולסלים

אם צריך { או } מילוליים בפלט, הכפילו אותם:

סוגריים בודדים פותחים ביטוי; {{ ו-}} מייצגים את { ו-} בפלט.

f-Strings על פני כמה שורות

f-strings מסתדרות מצוין עם מירכאות משולשות, וזה עוזר כשבונים תבניות קטנות בתוך הקוד:

אפשר גם לפצל f-string ארוכה לכמה ליטרלים של מחרוזות סמוכים. Python משרשרת אותם אוטומטית:

כשהסגנונות הישנים עדיין מופיעים

בקוד קיים תיתקלו בשני סגנונות עיצוב ישנים יותר:

שלושתם מפיקים את אותו פלט. f-strings מנצחות בנוחות הקריאה בתשעה מקרים מתוך עשרה. פנו ל-.format() כשצריך לבנות תבנית פעם אחת ולהחיל אותה פעמים רבות; השתמשו ב-% רק כשאתם מתחזקים קוד ישן שכבר משתמש בו.

למה הן לא מתאימות

שני מצבים מחייבים כלי אחר.

בניית שאילתות SQL. לעולם אל תשלבו קלט משתמש בתוך מחרוזת SQL עם f-string. השתמשו בשאילתות הפרמטריות של ספריית מסד הנתונים שלכם. f-string שם זו בדיוק הדרך שבה קורה SQL injection.

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

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

הבא בתור: מספרים ובוליאנים

f-strings עושות הרבה עבודה בעיצוב מספרים, אז כדאי להכיר את הטיפוסים המספריים קצת יותר לעומק. זה מה שמגיע עכשיו.

שאלות נפוצות

מה זה f-string ב-Python?

f-string היא מחרוזת ליטרלית עם הקידומת f, שבה כל מה שבתוך {...} מוחלף בזמן ריצה בערך של הביטוי. f"Hello, {name}" משבצת את הערך הנוכחי של name בתוך המחרוזת.

מתי f-strings נוספו ל-Python?

ב-Python 3.6. כל גרסה מודרנית של Python תומכת בהן, כך שאפשר להשתמש ב-f-strings בכל מקום שכותבים בו היום קוד Python 3. סגנונות העיצוב הישנים (% ו-.format()) עדיין עובדים, אבל ברוב המקרים הם פחות קריאים.

איך מעצבים מספר לשתי ספרות אחרי הנקודה ב-Python?

השתמשו במפרט פורמט אחרי נקודתיים בתוך הסוגריים המסולסלים: f"{price:.2f}". ה-.2f פירושו 'float עם שתי ספרות אחרי הנקודה העשרונית'. הוא מעגל את הערך המוצג; המספר המקורי לא משתנה.

אפשר לשים כל ביטוי בתוך f-string?

כן: חשבון, קריאות למתודות, קריאות לפונקציות, ביטויי תנאי. גם f"{name.upper()}" וגם f"{price * 1.2:.2f}" עובדים. שמרו על ביטויים קצרים; אם הקוד בתוך הסוגריים נעשה מסובך, חשבו אותו קודם לתוך משתנה.

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

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

להתחיל