الفرق بين المراجعتين ل"Python/str"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط
ط
سطر 1: سطر 1:
{{DISPLAYTITLE:السلاسل النصية في بايثون}}
+
<noinclude>{{DISPLAYTITLE:السلاسل النصية في بايثون}}</noinclude>
 
 
 
يمكن التعامل مع البيانات النصية في بايثون باستخدام كائنات <code>str</code> أو السلاسل النصية strings، وهي تسلسلات sequences غير قابلة للتغيير immutable من رموز Unicode.  
 
يمكن التعامل مع البيانات النصية في بايثون باستخدام كائنات <code>str</code> أو السلاسل النصية strings، وهي تسلسلات sequences غير قابلة للتغيير immutable من رموز Unicode.  
  
 
هناط طرق مختلفة للتعبير عن السلاسل النصية، إذ يمكن أن تحاط بعلامات اقتباس مفردة <code>('...')</code> أو مزدوجة <code>("...")</code>، ويستخدم الرمز <code>\</code> لتهريب علامات الاقتباس:<syntaxhighlight lang="python3">
 
هناط طرق مختلفة للتعبير عن السلاسل النصية، إذ يمكن أن تحاط بعلامات اقتباس مفردة <code>('...')</code> أو مزدوجة <code>("...")</code>، ويستخدم الرمز <code>\</code> لتهريب علامات الاقتباس:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> 'spam eggs'  # علامات اقتباس مفردة
 
>>> 'spam eggs'  # علامات اقتباس مفردة
 
 
'spam eggs'
 
'spam eggs'
 
 
>>> 'doesn\'t'  # استخدم \' لتهريب علامات الاقتباس المفردة...‏
 
>>> 'doesn\'t'  # استخدم \' لتهريب علامات الاقتباس المفردة...‏
 
 
"doesn't"
 
"doesn't"
 
 
>>> "doesn't"  # ...أو استخدم علامات الاقتباس المزدوجة
 
>>> "doesn't"  # ...أو استخدم علامات الاقتباس المزدوجة
 
 
"doesn't"
 
"doesn't"
 
 
>>> '"Yes," he said.'
 
>>> '"Yes," he said.'
 
 
'"Yes," he said.'
 
'"Yes," he said.'
 
 
>>> "\"Yes,\" he said."
 
>>> "\"Yes,\" he said."
 
 
'"Yes," he said.'
 
'"Yes," he said.'
 
 
>>> '"Isn\'t," she said.'
 
>>> '"Isn\'t," she said.'
 
 
'"Isn\'t," she said.'
 
'"Isn\'t," she said.'
 
 
 
</syntaxhighlight>تحاط المخرجات في الوضع التفاعلي للمفسّر بعلامات الاقتباس وتهرّب الأحرف الخاصة باستخدام الخطوط المائلة <code>\</code>، وعلى الرغم من أنّ المخرجات قد تبدو في بعض الأحيان مختلفة عن المدخلات (قد تختلف علامات الاقتباس التي تحيط بالسلسلة النصية) لكن السلسلتين متطابقتان.
 
</syntaxhighlight>تحاط المخرجات في الوضع التفاعلي للمفسّر بعلامات الاقتباس وتهرّب الأحرف الخاصة باستخدام الخطوط المائلة <code>\</code>، وعلى الرغم من أنّ المخرجات قد تبدو في بعض الأحيان مختلفة عن المدخلات (قد تختلف علامات الاقتباس التي تحيط بالسلسلة النصية) لكن السلسلتين متطابقتان.
  
سطر 39: سطر 24:
 
في المثال التالي يستخدم الحرف الخاص ‎\n ضمن السلسلة النصية والذي يظهر في السلسلة النصية المخرجة دون استخدام الدالة <code>[[Python/Function/print|print()]]‎</code>، وتحوّله الدالة إلى سطر جديد:<syntaxhighlight lang="python3">
 
في المثال التالي يستخدم الحرف الخاص ‎\n ضمن السلسلة النصية والذي يظهر في السلسلة النصية المخرجة دون استخدام الدالة <code>[[Python/Function/print|print()]]‎</code>، وتحوّله الدالة إلى سطر جديد:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> '"Isn\'t," she said.'
 
>>> '"Isn\'t," she said.'
 
 
'"Isn\'t," she said.'
 
'"Isn\'t," she said.'
 
 
>>> print('"Isn\'t," she said.')
 
>>> print('"Isn\'t," she said.')
 
 
"Isn't," she said.
 
"Isn't," she said.
 
 
>>> s = 'First line.\nSecond line.'
 
>>> s = 'First line.\nSecond line.'
 
 
>>> s  
 
>>> s  
 
 
'First line.\nSecond line.'
 
'First line.\nSecond line.'
 
 
>>> print(s)  
 
>>> print(s)  
 
 
First line.
 
First line.
 
 
Second line.
 
Second line.
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
إن كنت لا ترغب في تحويل الأحرف الخاصة المسبوقة بالعلامة <code>\</code> يمكنك استخدام السلاسل النصية الخام وذلك بإضافة الحرف <code>r</code> (اختصار raw) قبل علامة الاقتباس الأولى.
 
إن كنت لا ترغب في تحويل الأحرف الخاصة المسبوقة بالعلامة <code>\</code> يمكنك استخدام السلاسل النصية الخام وذلك بإضافة الحرف <code>r</code> (اختصار raw) قبل علامة الاقتباس الأولى.
  
 
في المثال التالي يظهر الحرف الخاص ‎<code>\n</code> ضمن السلسلة النصية، لاحظ الفرق بين المخرجات:<syntaxhighlight lang="python3">
 
في المثال التالي يظهر الحرف الخاص ‎<code>\n</code> ضمن السلسلة النصية، لاحظ الفرق بين المخرجات:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> print('C:\some\name') 
 
>>> print('C:\some\name') 
 
 
C:\some
 
C:\some
 
 
ame
 
ame
 
 
>>> print(r'C:\some\name')  # note the r before the quote
 
>>> print(r'C:\some\name')  # note the r before the quote
 
 
C:\some\name
 
C:\some\name
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
يمكن للسلاسل النصية أن تمتدّ لعدة أسطر، وذلك باستخدام علامات اقتباس ثلاثية <code>"""..."""</code> أو <code><nowiki>'''...'''</nowiki></code>. تضاف نهايات الأسطر إلى السلسلة النصية تلقائيًا، ولكن يمكن تجنّب ذلك بإضافة الرمز <code>\</code> في نهاية السطر، فعلى سبيل المثال:<syntaxhighlight lang="python">
 
يمكن للسلاسل النصية أن تمتدّ لعدة أسطر، وذلك باستخدام علامات اقتباس ثلاثية <code>"""..."""</code> أو <code><nowiki>'''...'''</nowiki></code>. تضاف نهايات الأسطر إلى السلسلة النصية تلقائيًا، ولكن يمكن تجنّب ذلك بإضافة الرمز <code>\</code> في نهاية السطر، فعلى سبيل المثال:<syntaxhighlight lang="python">
 
print("""\
 
print("""\
 
 
Usage: thingy [OPTIONS]
 
Usage: thingy [OPTIONS]
 
 
     -h                        Display this usage message
 
     -h                        Display this usage message
 
 
     -H hostname               Hostname to connect to
 
     -H hostname               Hostname to connect to
 
 
""")
 
""")
 
 
 
</syntaxhighlight>تعطي الشيفرة السابقة المخرجات التالية (لاحظ غياب السطر الجديد في بداية السلسلة):<syntaxhighlight>
 
</syntaxhighlight>تعطي الشيفرة السابقة المخرجات التالية (لاحظ غياب السطر الجديد في بداية السلسلة):<syntaxhighlight>
 
Usage: thingy [OPTIONS]
 
Usage: thingy [OPTIONS]
 
 
     -h                        Display this usage message
 
     -h                        Display this usage message
 
 
     -H hostname               Hostname to connect to
 
     -H hostname               Hostname to connect to
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== ربط السلاسل النصية وتكرارها ==
 
== ربط السلاسل النصية وتكرارها ==
 
يمكن ربط السلاسل النصية بعضها ببعض بواسطة العامل <code>+</code>، ويمكن تكرار السلاسل باستخدام العامل <code>*</code>، فمثلًا، تكرر الشيفرة التالية السلسلة النصية <code>'un'</code> ثلاث مرات وتربطها بعد ذلك بالسلسلة النصية <code>'ium'</code>:<syntaxhighlight lang="python3">
 
يمكن ربط السلاسل النصية بعضها ببعض بواسطة العامل <code>+</code>، ويمكن تكرار السلاسل باستخدام العامل <code>*</code>، فمثلًا، تكرر الشيفرة التالية السلسلة النصية <code>'un'</code> ثلاث مرات وتربطها بعد ذلك بالسلسلة النصية <code>'ium'</code>:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> 3 * 'un' + 'ium'
 
>>> 3 * 'un' + 'ium'
 
 
'unununium'
 
'unununium'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
تربط بايثون السلاسل النصية المتجاورة بعضها ببعض تلقائيًا:<syntaxhighlight lang="python3">
 
تربط بايثون السلاسل النصية المتجاورة بعضها ببعض تلقائيًا:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> 'Py' 'thon'
 
>>> 'Py' 'thon'
 
 
'Python'
 
'Python'
 
 
 
</syntaxhighlight>هذه الخاصية مفيدة عند الحاجة إلى لتقسيم السلاسل الطويلة:<syntaxhighlight lang="python3">
 
</syntaxhighlight>هذه الخاصية مفيدة عند الحاجة إلى لتقسيم السلاسل الطويلة:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> text = ('Put several strings within parentheses '
 
>>> text = ('Put several strings within parentheses '
 
 
...         'to have them joined together.')
 
...         'to have them joined together.')
 
 
>>> text
 
>>> text
 
 
'Put several strings within parentheses to have them joined together.'
 
'Put several strings within parentheses to have them joined together.'
 
 
 
</syntaxhighlight>تعمل هذه الخاصية مع السلاسل النصية المحاطة بعلامات اقتباس فقط، ولا تعمل مع المتغيرات أو التعابير:<syntaxhighlight lang="python3">
 
</syntaxhighlight>تعمل هذه الخاصية مع السلاسل النصية المحاطة بعلامات اقتباس فقط، ولا تعمل مع المتغيرات أو التعابير:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> prefix = 'Py'
 
>>> prefix = 'Py'
 
 
>>> prefix 'thon'  # لا يمكن ربط السلسلة النصية بالمتغيرات
 
>>> prefix 'thon'  # لا يمكن ربط السلسلة النصية بالمتغيرات
 
 
  ...
 
  ...
 
 
SyntaxError: invalid syntax
 
SyntaxError: invalid syntax
 
 
>>> ('un' * 3) 'ium'
 
>>> ('un' * 3) 'ium'
 
 
  ...
 
  ...
 
 
SyntaxError: invalid syntax
 
SyntaxError: invalid syntax
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
استخدم العامل + لربط المتغيرات أو المتغيرات مع السلاسل النصية:<syntaxhighlight lang="python3">
 
استخدم العامل + لربط المتغيرات أو المتغيرات مع السلاسل النصية:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> prefix + 'thon'
 
>>> prefix + 'thon'
 
 
'Python'
 
'Python'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== فهرسة السلاسل النصية ==
 
== فهرسة السلاسل النصية ==
 
يمكن فهرسة السلاسل النصية في بايثون، ويحمل الحرف الأول رقم الفهرس <code>0</code>. نوع الأحرف المفردة غير متوفّر في بايثون، فالحرف المفرد هو ببساطة سلسلة نصية ذات عنصر واحد:<syntaxhighlight lang="python3">
 
يمكن فهرسة السلاسل النصية في بايثون، ويحمل الحرف الأول رقم الفهرس <code>0</code>. نوع الأحرف المفردة غير متوفّر في بايثون، فالحرف المفرد هو ببساطة سلسلة نصية ذات عنصر واحد:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word = 'Python'
 
>>> word = 'Python'
 
 
>>> word[0]  # الحرف في الموقع 0
 
>>> word[0]  # الحرف في الموقع 0
 
 
'P'
 
'P'
 
 
>>> word[5]  # الحرف في الموقع 5
 
>>> word[5]  # الحرف في الموقع 5
 
 
'n'
 
'n'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
يمكن لأرقام الفهارس أن تكون سالبة، وحينئذ يبدأ العدّ من اليمين:<syntaxhighlight lang="python3">
 
يمكن لأرقام الفهارس أن تكون سالبة، وحينئذ يبدأ العدّ من اليمين:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word[-1]  # الحرف الأخير
 
>>> word[-1]  # الحرف الأخير
 
 
'n'
 
'n'
 
 
>>> word[-2]  # الحرف ما قبل الأخير
 
>>> word[-2]  # الحرف ما قبل الأخير
 
 
'o'
 
'o'
 
 
>>> word[-6]
 
>>> word[-6]
 
 
'P'
 
'P'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
سطر 204: سطر 111:
 
إضافة إلى الفهرسة تدعم بايثون عملية الاقتطاع (Slicing) أيضًا. تستخدم الفهرسة للحصول على أحرف مفردة، أما عملية التقطيع فتتيح الحصول على جزء من السلسلة النصية:<syntaxhighlight lang="python3">
 
إضافة إلى الفهرسة تدعم بايثون عملية الاقتطاع (Slicing) أيضًا. تستخدم الفهرسة للحصول على أحرف مفردة، أما عملية التقطيع فتتيح الحصول على جزء من السلسلة النصية:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word[0:2]  # الحروف من الموقع 0 (مشمول) إلى الموقع 2 (غير مشمول)‏
 
>>> word[0:2]  # الحروف من الموقع 0 (مشمول) إلى الموقع 2 (غير مشمول)‏
 
 
'Py'
 
'Py'
 
 
>>> word[2:5]  # الحروف من الموقع 2 (مشمول) إلى الموقع 5 (غير مشمول)‏
 
>>> word[2:5]  # الحروف من الموقع 2 (مشمول) إلى الموقع 5 (غير مشمول)‏
 
 
'tho'
 
'tho'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
لاحظ أنّ الرقم الأول يكون مشمولًا دائمًا بعملية الاقتطاع أما الرقم الأخير فلا يكون مشمولًا. وهكذا فإن التعبير <code>s[:i] + s[i:]</code>‎ يساوي <code>s</code> دائمًا:<syntaxhighlight lang="python3">
 
لاحظ أنّ الرقم الأول يكون مشمولًا دائمًا بعملية الاقتطاع أما الرقم الأخير فلا يكون مشمولًا. وهكذا فإن التعبير <code>s[:i] + s[i:]</code>‎ يساوي <code>s</code> دائمًا:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word[:2] + word[2:]
 
>>> word[:2] + word[2:]
 
 
'Python'
 
'Python'
 
 
>>> word[:4] + word[4:]
 
>>> word[:4] + word[4:]
 
 
'Python'
 
'Python'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
هناك بعض القيم الافتراضية المفيدة في خاصية التقطيع، فإذا حذف الرقم الأول فإنّ القيمة الافتراضية له ستكون صفرًا، وإذا حُذف الرقم الثاني فإنّ القيمة الافتراضية تكون طول السلسلة النصية التي سيجري اقتطاعها.<syntaxhighlight lang="python3">
 
هناك بعض القيم الافتراضية المفيدة في خاصية التقطيع، فإذا حذف الرقم الأول فإنّ القيمة الافتراضية له ستكون صفرًا، وإذا حُذف الرقم الثاني فإنّ القيمة الافتراضية تكون طول السلسلة النصية التي سيجري اقتطاعها.<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word[:2]   # اقتطاع الحروف من الموقع 0 إلى الموقع 2 (غير مشمول)‏
 
>>> word[:2]   # اقتطاع الحروف من الموقع 0 إلى الموقع 2 (غير مشمول)‏
 
 
'Py'
 
'Py'
 
 
>>> word[4:]   # اقتطاع الحروف من الموقع 4 (مشمول) إلى نهاية السلسلة
 
>>> word[4:]   # اقتطاع الحروف من الموقع 4 (مشمول) إلى نهاية السلسلة
 
 
'on'
 
'on'
 
 
>>> word[-2:]  # الحروف من الموقع 2 من اليمين (مشمول) إلى نهاية السلسلة
 
>>> word[-2:]  # الحروف من الموقع 2 من اليمين (مشمول) إلى نهاية السلسلة
 
 
'on'
 
'on'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
لتتذكّر كيف تجري عملية الاقتطاع يمكنك التفكير في الفهارس وكأنّها فواصل بين الحروف، وتأخذ الحافة اليسرى من الحرف الأول الرقم <code>0</code>، وتأخذ الحافة اليمنى من الحرف الأخير في السلسلة النصية المكوّنة من <code>n</code> حروف الرقم <code>n</code>، فمثلًا:<syntaxhighlight lang="python3">
 
لتتذكّر كيف تجري عملية الاقتطاع يمكنك التفكير في الفهارس وكأنّها فواصل بين الحروف، وتأخذ الحافة اليسرى من الحرف الأول الرقم <code>0</code>، وتأخذ الحافة اليمنى من الحرف الأخير في السلسلة النصية المكوّنة من <code>n</code> حروف الرقم <code>n</code>، فمثلًا:<syntaxhighlight lang="python3">
 
 +---+---+---+---+---+---+
 
 +---+---+---+---+---+---+
 
 
 | P | y | t | h | o | n |
 
 | P | y | t | h | o | n |
 
 
 +---+---+---+---+---+---+
 
 +---+---+---+---+---+---+
 
 
 0   1   2   3   4   5   6
 
 0   1   2   3   4   5   6
 
 
-6  -5  -4  -3  -2  -1
 
-6  -5  -4  -3  -2  -1
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
سطر 268: سطر 148:
 
تؤدي محاولة استخدام فهرس كبير جدًّا (يتجاوز طول السلسلة النصية) إلى حدوث خطأ:<syntaxhighlight lang="python3">
 
تؤدي محاولة استخدام فهرس كبير جدًّا (يتجاوز طول السلسلة النصية) إلى حدوث خطأ:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word[42]  # the word only has 6 characters
 
>>> word[42]  # the word only has 6 characters
 
 
Traceback (most recent call last):
 
Traceback (most recent call last):
 
 
  File "<stdin>", line 1, in <module>
 
  File "<stdin>", line 1, in <module>
 
 
IndexError: string index out of range
 
IndexError: string index out of range
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
ولكن لا تظهر هذه الأخطاء عند اقتطاع السلاسل النصية:<syntaxhighlight lang="python3">
 
ولكن لا تظهر هذه الأخطاء عند اقتطاع السلاسل النصية:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word[4:42]
 
>>> word[4:42]
 
 
'on'
 
'on'
 
 
>>> word[42:]
 
>>> word[42:]
 
 
''
 
''
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
تمتاز السلاسل النصية في بايثون بأنّها غير قابلة للتعديل immutable؛ لذا فإنّ إسناد قيمة إلى موقع مفهرس ضمن السلسلة سيؤدي إلى حدوث خطأ:<syntaxhighlight lang="python3">
 
تمتاز السلاسل النصية في بايثون بأنّها غير قابلة للتعديل immutable؛ لذا فإنّ إسناد قيمة إلى موقع مفهرس ضمن السلسلة سيؤدي إلى حدوث خطأ:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> word[0] = 'J'
 
>>> word[0] = 'J'
 
 
  ...
 
  ...
 
 
TypeError: 'str' object does not support item assignment
 
TypeError: 'str' object does not support item assignment
 
 
>>> word[2:] = 'py'
 
>>> word[2:] = 'py'
 
 
  ...
 
  ...
 
 
TypeError: 'str' object does not support item assignment
 
TypeError: 'str' object does not support item assignment
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
إن كنت ترغب في تغيير السلسلة النصية، فيجب إنشاء واحدة جديدة:<syntaxhighlight lang="python3">
 
إن كنت ترغب في تغيير السلسلة النصية، فيجب إنشاء واحدة جديدة:<syntaxhighlight lang="python3">
 
>>>
 
>>>
 
 
>>> 'J' + word[1:]
 
>>> 'J' + word[1:]
 
 
'Jython'
 
'Jython'
 
 
>>> word[:2] + 'py'
 
>>> word[:2] + 'py'
 
 
'Pypy'
 
'Pypy'
 
 
تعيد الدالة الداخلية len()‎ طول السلسلة النصية:
 
تعيد الدالة الداخلية len()‎ طول السلسلة النصية:
 
 
>>>
 
>>>
 
 
>>> s = 'supercalifragilisticexpialidocious'
 
>>> s = 'supercalifragilisticexpialidocious'
 
 
>>> len(s)
 
>>> len(s)
 
 
34
 
34
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
سطر 338: سطر 188:
 
تستخدم الدالة <code>str()</code>‎ لتحويل الكائنات إلى سلاسل نصية، وتعيد سلسلة فارغة في حال عدم تقديم كائن لها. تعيد الدالة <code>str(object)</code>‎ التابع <code>object.__str__()‎</code> وهو عبارة عن تمثيل للكائن على هيئة سلسلة نصية قابلة للطباعة ومنسّقة بصورة جيدة. إن كان الكائن سلسلة نصية فإنّ الدالة تعيد السلسلة النصّية ذاتها. إن لم يمتلك الكائن تابع <code>‎__str__()‎</code> فإنّ الدالة <code>str()</code>‎ ستتراجع fall back إلى الدالة <code>[[Python/Function/repr|repr(object)]]</code>‎.<syntaxhighlight lang="python3">
 
تستخدم الدالة <code>str()</code>‎ لتحويل الكائنات إلى سلاسل نصية، وتعيد سلسلة فارغة في حال عدم تقديم كائن لها. تعيد الدالة <code>str(object)</code>‎ التابع <code>object.__str__()‎</code> وهو عبارة عن تمثيل للكائن على هيئة سلسلة نصية قابلة للطباعة ومنسّقة بصورة جيدة. إن كان الكائن سلسلة نصية فإنّ الدالة تعيد السلسلة النصّية ذاتها. إن لم يمتلك الكائن تابع <code>‎__str__()‎</code> فإنّ الدالة <code>str()</code>‎ ستتراجع fall back إلى الدالة <code>[[Python/Function/repr|repr(object)]]</code>‎.<syntaxhighlight lang="python3">
 
>>> str()
 
>>> str()
 
 
''
 
''
 
 
>>> str(3)
 
>>> str(3)
 
 
'3'
 
'3'
 
 
>>> str(set())
 
>>> str(set())
 
 
'set()'
 
'set()'
 
 
>>> str([1])
 
>>> str([1])
 
 
'[1]'
 
'[1]'
 
 
>>> x = [1, 2, 3]
 
>>> x = [1, 2, 3]
 
 
>>> str(x)
 
>>> str(x)
 
 
'[1, 2, 3]'
 
'[1, 2, 3]'
 
 
>>> y = 2-3j
 
>>> y = 2-3j
 
 
>>> str(y)
 
>>> str(y)
 
+
'(2-3j)
'(2-3j)'
 
 
 
 
>>> z = "Python"
 
>>> z = "Python"
 
 
>>> str(z)
 
>>> str(z)
 
 
'Python'
 
'Python'
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== مصادر ==
 
== مصادر ==
 
* صفحتا [https://docs.python.org/3/tutorial/introduction.html#strings An Informal Introduction To Python]و [https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str Built-in Types] في توثيق بايثون الرسمي.
 
* صفحتا [https://docs.python.org/3/tutorial/introduction.html#strings An Informal Introduction To Python]و [https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str Built-in Types] في توثيق بايثون الرسمي.
 
[[تصنيف:Python]]
 
[[تصنيف:Python]]
 
[[تصنيف:Python Types]]
 
[[تصنيف:Python Types]]

مراجعة 03:28، 24 فبراير 2018

يمكن التعامل مع البيانات النصية في بايثون باستخدام كائنات str أو السلاسل النصية strings، وهي تسلسلات sequences غير قابلة للتغيير immutable من رموز Unicode.

هناط طرق مختلفة للتعبير عن السلاسل النصية، إذ يمكن أن تحاط بعلامات اقتباس مفردة ('...') أو مزدوجة ("...")، ويستخدم الرمز \ لتهريب علامات الاقتباس:

>>>
>>> 'spam eggs'  # علامات اقتباس مفردة
'spam eggs'
>>> 'doesn\'t'  # استخدم \' لتهريب علامات الاقتباس المفردة...‏
"doesn't"
>>> "doesn't"  # ...أو استخدم علامات الاقتباس المزدوجة
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'

تحاط المخرجات في الوضع التفاعلي للمفسّر بعلامات الاقتباس وتهرّب الأحرف الخاصة باستخدام الخطوط المائلة \، وعلى الرغم من أنّ المخرجات قد تبدو في بعض الأحيان مختلفة عن المدخلات (قد تختلف علامات الاقتباس التي تحيط بالسلسلة النصية) لكن السلسلتين متطابقتان.

تحاط السلسلة النصية بعلامات اقتباس مزدوجة إن كانت تحتوي على علامات اقتباس مفردة، أما إذا احتوت على علامات اقتباس مزدوجة فإنّها تحاط بعلامات اقتباس مفردة.

تنتج الدالة print() مخرجات سهلة القراءة وذلك بحذف علامات الاقتباس التي تحيط بالسلسلة النصية وطباعة الأحرف الخاصّة والمهرّبة.

في المثال التالي يستخدم الحرف الخاص ‎\n ضمن السلسلة النصية والذي يظهر في السلسلة النصية المخرجة دون استخدام الدالة print()، وتحوّله الدالة إلى سطر جديد:

>>>
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
>>> print('"Isn\'t," she said.')
"Isn't," she said.
>>> s = 'First line.\nSecond line.'
>>> s  
'First line.\nSecond line.'
>>> print(s)  
First line.
Second line.

إن كنت لا ترغب في تحويل الأحرف الخاصة المسبوقة بالعلامة \ يمكنك استخدام السلاسل النصية الخام وذلك بإضافة الحرف r (اختصار raw) قبل علامة الاقتباس الأولى.

في المثال التالي يظهر الحرف الخاص ‎\n ضمن السلسلة النصية، لاحظ الفرق بين المخرجات:

>>>
>>> print('C:\some\name') 
C:\some
ame
>>> print(r'C:\some\name')  # note the r before the quote
C:\some\name

يمكن للسلاسل النصية أن تمتدّ لعدة أسطر، وذلك باستخدام علامات اقتباس ثلاثية """...""" أو '''...'''. تضاف نهايات الأسطر إلى السلسلة النصية تلقائيًا، ولكن يمكن تجنّب ذلك بإضافة الرمز \ في نهاية السطر، فعلى سبيل المثال:

print("""\
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
""")

تعطي الشيفرة السابقة المخرجات التالية (لاحظ غياب السطر الجديد في بداية السلسلة):

Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to

ربط السلاسل النصية وتكرارها

يمكن ربط السلاسل النصية بعضها ببعض بواسطة العامل +، ويمكن تكرار السلاسل باستخدام العامل *، فمثلًا، تكرر الشيفرة التالية السلسلة النصية 'un' ثلاث مرات وتربطها بعد ذلك بالسلسلة النصية 'ium':

>>>
>>> 3 * 'un' + 'ium'
'unununium'

تربط بايثون السلاسل النصية المتجاورة بعضها ببعض تلقائيًا:

>>>
>>> 'Py' 'thon'
'Python'

هذه الخاصية مفيدة عند الحاجة إلى لتقسيم السلاسل الطويلة:

>>>
>>> text = ('Put several strings within parentheses '
...         'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'

تعمل هذه الخاصية مع السلاسل النصية المحاطة بعلامات اقتباس فقط، ولا تعمل مع المتغيرات أو التعابير:

>>>
>>> prefix = 'Py'
>>> prefix 'thon'  # لا يمكن ربط السلسلة النصية بالمتغيرات
  ...
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
  ...
SyntaxError: invalid syntax

استخدم العامل + لربط المتغيرات أو المتغيرات مع السلاسل النصية:

>>>
>>> prefix + 'thon'
'Python'

فهرسة السلاسل النصية

يمكن فهرسة السلاسل النصية في بايثون، ويحمل الحرف الأول رقم الفهرس 0. نوع الأحرف المفردة غير متوفّر في بايثون، فالحرف المفرد هو ببساطة سلسلة نصية ذات عنصر واحد:

>>>
>>> word = 'Python'
>>> word[0]  # الحرف في الموقع 0
'P'
>>> word[5]  # الحرف في الموقع 5
'n'

يمكن لأرقام الفهارس أن تكون سالبة، وحينئذ يبدأ العدّ من اليمين:

>>>
>>> word[-1]  # الحرف الأخير
'n'
>>> word[-2]  # الحرف ما قبل الأخير
'o'
>>> word[-6]
'P'

لاحظ أنّه لمّا كان ‎-0 و 0 متساويان، فإنّ الفهارس السالبة تبدأ من ‎-1.

اقتطاع السلسلة النصية

إضافة إلى الفهرسة تدعم بايثون عملية الاقتطاع (Slicing) أيضًا. تستخدم الفهرسة للحصول على أحرف مفردة، أما عملية التقطيع فتتيح الحصول على جزء من السلسلة النصية:

>>>
>>> word[0:2]  # الحروف من الموقع 0 (مشمول) إلى الموقع 2 (غير مشمول)‏
'Py'
>>> word[2:5]  # الحروف من الموقع 2 (مشمول) إلى الموقع 5 (غير مشمول)‏
'tho'

لاحظ أنّ الرقم الأول يكون مشمولًا دائمًا بعملية الاقتطاع أما الرقم الأخير فلا يكون مشمولًا. وهكذا فإن التعبير s[:i] + s[i:]‎ يساوي s دائمًا:

>>>
>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'

هناك بعض القيم الافتراضية المفيدة في خاصية التقطيع، فإذا حذف الرقم الأول فإنّ القيمة الافتراضية له ستكون صفرًا، وإذا حُذف الرقم الثاني فإنّ القيمة الافتراضية تكون طول السلسلة النصية التي سيجري اقتطاعها.

>>>
>>> word[:2]   # اقتطاع الحروف من الموقع 0 إلى الموقع 2 (غير مشمول)‏
'Py'
>>> word[4:]   # اقتطاع الحروف من الموقع 4 (مشمول) إلى نهاية السلسلة
'on'
>>> word[-2:]  # الحروف من الموقع 2 من اليمين (مشمول) إلى نهاية السلسلة
'on'

لتتذكّر كيف تجري عملية الاقتطاع يمكنك التفكير في الفهارس وكأنّها فواصل بين الحروف، وتأخذ الحافة اليسرى من الحرف الأول الرقم 0، وتأخذ الحافة اليمنى من الحرف الأخير في السلسلة النصية المكوّنة من n حروف الرقم n، فمثلًا:

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

يظهر في الصف الأول الأرقام التي تشير إلى مواقع الفهارس في السلسلة النصية 0...6، أما الصفّ الثاني فتشير الأرقام فيه إلى الفهارس السالبة. وتتكون القطعة التي تبدأ بالفهرس i وتنتهي بالفهرس j من جميع الحروف الموجودة بين الحافتين i و j على التوالي.

يكون طول القطعة عند استخدام الفهارس غير السالبة هو الفرق بين الرقمين إن كانا ضمن الحدود، فعلى سبيل المثال طول القطعة word[1:3]‎ هو 2.

تؤدي محاولة استخدام فهرس كبير جدًّا (يتجاوز طول السلسلة النصية) إلى حدوث خطأ:

>>>
>>> word[42]  # the word only has 6 characters
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

ولكن لا تظهر هذه الأخطاء عند اقتطاع السلاسل النصية:

>>>
>>> word[4:42]
'on'
>>> word[42:]
''

تمتاز السلاسل النصية في بايثون بأنّها غير قابلة للتعديل immutable؛ لذا فإنّ إسناد قيمة إلى موقع مفهرس ضمن السلسلة سيؤدي إلى حدوث خطأ:

>>>
>>> word[0] = 'J'
  ...
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
  ...
TypeError: 'str' object does not support item assignment

إن كنت ترغب في تغيير السلسلة النصية، فيجب إنشاء واحدة جديدة:

>>>
>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'
تعيد الدالة الداخلية len() طول السلسلة النصية:
>>>
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

التحويل إلى سلسلة نصية

تستخدم الدالة str()‎ لتحويل الكائنات إلى سلاسل نصية، وتعيد سلسلة فارغة في حال عدم تقديم كائن لها. تعيد الدالة str(object)‎ التابع object.__str__()‎ وهو عبارة عن تمثيل للكائن على هيئة سلسلة نصية قابلة للطباعة ومنسّقة بصورة جيدة. إن كان الكائن سلسلة نصية فإنّ الدالة تعيد السلسلة النصّية ذاتها. إن لم يمتلك الكائن تابع ‎__str__()‎ فإنّ الدالة str()‎ ستتراجع fall back إلى الدالة repr(object)‎.

>>> str()
''
>>> str(3)
'3'
>>> str(set())
'set()'
>>> str([1])
'[1]'
>>> x = [1, 2, 3]
>>> str(x)
'[1, 2, 3]'
>>> y = 2-3j
>>> str(y)
'(2-3j)
>>> z = "Python"
>>> str(z)
'Python'

مصادر