2.4. السلاسل النصية#

السلسلة النصية هي تسلسل من محارف Unicode تُكتب بين علامتي اقتباس. علامتا الاقتباس المفردة والمزدوجة متكافئتان -- اختر النمط الذي يتيح لك تجنّب إفلات علامات الاقتباس التي تظهر داخل النص:

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. تسلسلات الإفلات#

داخل سلسلة نصية عادية، يُدخِل \ محرفاً خاصاً:

  • \n -- سطر جديد

  • \t -- علامة جدولة (tab)

  • \\ -- شرطة مائلة عكسية حرفية

  • \' / \" -- علامة اقتباس حرفية (عندما تكون لولا ذلك ستُنهي السلسلة)

  • \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'

التقطيع 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. عدم القابلية للتغيير#

لا يمكن تعديل السلاسل النصية في مكانها. العمليات التي تبدو وكأنها تُغيّر سلسلة تُعيد في الواقع سلسلة جديدة وتترك الأصل دون مساس:

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

‏"لتغيير" سلسلة نصية، أعِد ربط الاسم بالقيمة الجديدة: name = name.upper().