2.4. מחרוזות

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

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

מחרוזות במירכאות משולשות ("""...""" או '''...''') נמתחות על פני שורות מרובות ושומרות על תווי שורה חדשה כפשוטם:

banner = """boot ok
firmware v1.28
"""
print(banner)

פלט:

boot ok
firmware v1.28

2.4.1. רצפי בריחה (escape sequences)

בתוך מחרוזת רגילה, \ מציג תו מיוחד:

  • \n – שורה חדשה

  • \t – טאב

  • \\ – לוכסן אחורי כפשוטו

  • \' / \" – מירכאה כפשוטה (כאשר אחרת הייתה מסיימת את המחרוזת)

  • \xHH – התו בעל הקוד ההקסדצימלי HH

  • \uHHHH – נקודת הקוד של Unicode HHHH

כאשר מחרוזת מכילה לוכסנים אחוריים רבים, הוסיפו לפני הליטרל את התחילית r כדי להפוך אותו למחרוזת גולמית (raw). אז הלוכסנים האחוריים נלקחים כפשוטם – \n נשאר באורך שני תווים במקום להיות מוחלף בשורה חדשה:

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. שרשור וחזרה

שתי מחרוזות מחוברות באמצעות +; מחרוזת חוזרת על עצמה באמצעות *:

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

+ חוזר בתוך לולאה מקצה מחרוזת חדשה בכל איטרציה. לבניית מחרוזות גדולות יותר ממקטעים רבים, השתמשו ב-str.join().

2.4.3. אורך, אינדוקס וחיתוך

len() מחזירה את מספר התווים במחרוזת. אינדוקס באמצעות [] מחזיר מחרוזת בת תו אחד במיקום הנתון; אינדקסים שליליים נספרים מהסוף:

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

פרוסה (slice) s[start:stop] מחזירה את תת-המחרוזת מהמיקום start ועד stop אך לא כולל אותו. ניתן להשמיט כל אחד מהקצוות כדי לציין ”ההתחלה“ או ”הסוף“, וערך שלישי אופציונלי s[start:stop:step] מאפשר לדלג על תווים.

The string "OpenMV" with position markers between each character, illustrating how a slice selects the characters between two positions.

מיקומי הפרוסה יושבים בין התווים. s[2:5] בוחר את התווים במיקומים 2, 3 ו-4.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

פרוסה מחוץ לטווח מחזירה בשקט את החלק הקיים, יהיה אשר יהיה – s[100:200] היא המחרוזת הריקה "", ולא שגיאה. אינדוקס מחוץ לטווח, לעומת זאת, מעלה IndexError.

2.4.4. אי-שינוּיוּת (immutability)

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

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

כדי ”לשנות“ מחרוזת, קשרו מחדש את השם לערך החדש: name = name.upper().