החלפת מחרוזות עם str.format

בפייתון קל לשלב משתנים בתוך מחרוזות באמצעות סימן ה-%, אבל לא תמיד % נותן את הגמישות שאנו צריכים. הפקודה str.format מציעה הרבה יותר יכולות ובתחביר שיותר קל להתרגל אליו.

1. אין צורך לציין את סוג הקלט

החלפת format הפשוטה ביותר משתמשת בסימן {} במקום בסימן % באופן הבא:

name = "Ynon"
print "Hello {}".format(name)

היתרון הראשון של הכתיב הוא שלא צריך יותר לזכור אם אתם מעבירים מספר או מחרוזת. כל הדוגמאות הבאות עובדות (בדומה להחלפת %s)

print "Hello {}".format("ynon")

print "Hello {}".format(10)

print "Hello {}".format([1,2,3])

2. לא צריך גם לזכור יותר את סדר המשתנים

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

"{name} likes to eat {food}".format(name="Joe", food="Lettuce")

ואם כבר יש לכם את כל המשתנים שמורים ב Dictionary תוכלו להעביר ישירות את אותו ה Dictionary כפרמטר לפונקציה באופן הבא:

d = {'name': 'joe', 'food' : 'lettuce'}
"{name} likes to eat {food}".format(**d)

3. שליטה מלאה על אורכים

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

להלן מספר דוגמאות וערכן:

>>> "{name:20} likes to eat {food}".format(name="Joe", food="Lettuce")
'Joe                  likes to eat Lettuce'

>>> "{name:>20} likes to eat {food}".format(name="Joe", food="Lettuce")
'                 Joe likes to eat Lettuce'

>>> "{name:^20} likes to eat {food}".format(name="Joe", food="Lettuce")
'        Joe          likes to eat Lettuce'

אפשר גם לבחור את תו המילוי באמצעות כתיבת ערכו משמאל לסימן היישור כמתואר בדוגמא הבאה:

>>> "{name:_^20} likes to eat {food}".format(name="Joe", food="Lettuce")
'________Joe_________ likes to eat Lettuce'

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

>>> "{name:} likes to eat {food:.3}".format(name="Joe", food="Lettuce")
'Joe likes to eat Let'

>>> "2 / 3 = {:.2}".format(2.0/3)
'2 / 3 = 0.67'
>>> "2 / 3 = {:.3}".format(2.0/3)
'2 / 3 = 0.667'
>>> "2 / 3 = {:.4}".format(2.0/3)
'2 / 3 = 0.6667'

4. בחירת בסיס הספירה למספרים

הפקודה format היא דרך טובה להמיר בין בסיסי ספירה שכן היא מאפשרת ציון בסיס הספירה של הפלט בהדפסת מספר. x עבור ערך הקסא-דצימלי, b עבור ערך בינארי ו o לאוקטלי. הנה הדוגמאות:

>>> "hex(10) = {:x}".format(10)
'hex(10) = a'

>>> "binary(10) = {:b}".format(10)
'binary(10) = 1010'

>>> "octal(10) = {:o}".format(10)
'octal(10) = 12'

5. קישורים ומידע נוסף

בקישור הבא תמצאו דף קיצורים ומבוסס דוגמאות לשימוש ב format:
https://pyformat.info

והקישור הבא ייקח אתכם לתיעוד הפונקציה עם מילון מקיף של כל היכולות:
https://docs.python.org/2/library/string.html#format-string-syntax


להלן הדוגמאות שהוצגו בוידאו:

>>> name = "Ynon"
>>> print "Hello {}".format(name)
Hello Ynon



>>> "{name} likes to eat {food}".format(name="Joe", food="Lettuce")
'Joe likes to eat Lettuce'



>>> "{name:20} likes to eat {food}".format(name="Joe", food="Lettuce")
'Joe                  likes to eat Lettuce'

>>> "{name:>20} likes to eat {food}".format(name="Joe", food="Lettuce")
'                 Joe likes to eat Lettuce'

>>> "{name:^20} likes to eat {food}".format(name="Joe", food="Lettuce")
'        Joe          likes to eat Lettuce'



>>> "{name:} likes to eat {food:.3}".format(name="Joe", food="Lettuce")
'Joe likes to eat Let'

>>> "2 / 3 = {:.2}".format(2.0/3)
'2 / 3 = 0.67'
>>> "2 / 3 = {:.3}".format(2.0/3)
'2 / 3 = 0.667'
>>> "2 / 3 = {:.4}".format(2.0/3)
'2 / 3 = 0.6667'



>>> "hex(10) = {:x}".format(10)
'hex(10) = a'

>>> "binary(10) = {:b}".format(10)
'binary(10) = 1010'

>>> "octal(10) = {:o}".format(10)
'octal(10) = 12'


בקישור הבא תמצאו דף קיצורים ומבוסס דוגמאות לשימוש ב format:
https://pyformat.info

והקישור הבא ייקח אתכם לתיעוד הפונקציה עם מילון מקיף של כל היכולות:
https://docs.python.org/2/library/string.html#format-string-syntax