• בלוג
  • יומי
  • היום למדתי: מחיקת אינדנטציה בפייתון

היום למדתי: מחיקת אינדנטציה בפייתון

16/04/2026

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

query = <<~END
  SELECT name, email
  FROM users
  WHERE active = true
END

puts query

מדפיס:

SELECT name, email
FROM users
WHERE active = true

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

query = """
  SELECT name, email
  FROM users
  WHERE active = true
""".strip()

print(query)

מדפיס את זה:

SELECT name, email
  FROM users
  WHERE active = true

היום למדתי על מודול מובנה בפייתון בשם textwrap שיודע לעשות בדיוק את הטריק שאני אוהב מרובי. כך נראה קוד פייתון שמשתמש בו:

import textwrap

query = textwrap.dedent("""
  SELECT name, email
  FROM users
  WHERE active = true
""").strip()

print(query)

והתוצאה:

SELECT name, email
FROM users
WHERE active = true

שימו לב שה strip צריך להופיע אחרי הקריאה ל dedent אחרת האינדנטציה הלא שווה מבלבלת את המודול.

בכל מקרה לא כדאי להתרגל אליו כי ממש מעבר לפינה מחכה לנו PEP822 עם תחילית d למחרוזת שמורידה אינדנטציה אוטומטית, כלומר פייתון 3.15 כבר יאפשר לנו לכתוב:

query = d"""
  SELECT name, email
  FROM users
  WHERE active = true
  """

print(query)

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

ב PEP תוכלו למצוא עוד המון דוגמאות מה יעבור ומה לא יעבוד עם הכתיב החדש: https://peps.python.org/pep-0822/