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().