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] تتيح لك تخطّي محارف.
مواضع التقطيع تقع بين المحارف. 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().