2.8. الصفوف#
الصف (tuple) هو تسلسل مرتّب وغير قابل للتغيير من القيم. وبمجرد إنشائه، لا يمكن إضافة العناصر بداخله أو إزالتها أو تغييرها.
2.8.1. إنشاء الصفوف#
استخدم الأقواس (أو مجرد الفواصل) لإنشاء صف:
empty = ()
point = (3, 4)
triple = 1, 2, 3 # parentheses are optional
mixed = (1, "two", 3.14)
nested = ((1, 2), (3, 4))
2.8.1.1. مطبّ العنصر الواحد#
الأقواس حول قيمة هي مجرد أقواس؛ وما يصنع الصف فعلًا هو الفاصلة. فالصف ذو العنصر الواحد يحتاج إلى فاصلة لاحقة:
>>> (1)
1 # just an int in parens
>>> (1,)
(1,) # a one-element tuple
>>> type((1)), type((1,))
(<class 'int'>, <class 'tuple'>)
2.8.2. الطول والفهرسة والتقطيع#
مثل القوائم والسلاسل النصية -- len() والفهرسة والتقطيع و in و + / * كلها تعمل بالطريقة نفسها:
>>> point = (3, 4, 5)
>>> len(point)
3
>>> point[0]
3
>>> point[1:]
(4, 5)
>>> 4 in point
True
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
2.8.3. عدم القابلية للتغيير#
الصفوف ليس لها append أو pop أو sort أو أي دالة أخرى في المكان. والإسناد المفهرس يثير TypeError:
>>> point = (3, 4)
>>> point[0] = 99
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item assignment
لـ"تعديل" صف، ابنِ صفًا جديدًا بالقيم المتغيرة.
2.8.4. التفكيك#
القوة الخارقة الرئيسية للصف هي التفكيك: إسناد كل عنصر إلى متغير منفصل في عبارة واحدة.
يربط التفكيك كل عنصر من الصف بمتغير مسمّى في إسناد واحد.#
>>> point = (3, 4)
>>> x, y = point
>>> x
3
>>> y
4
يمكن أن يكون الطرف الأيمن أي كائن قابل للتكرار -- قائمة، أو سلسلة نصية، أو القيمة المُعادة من دالة:
>>> a, b, c = "abc"
>>> a, b, c
('a', 'b', 'c')
* في المقدمة تجمع "البقية" من التفكيك في قائمة:
>>> first, *rest = [10, 20, 30, 40]
>>> first
10
>>> rest
[20, 30, 40]
2.8.5. قيم إرجاع متعددة#
يمكن لدالة أن تُعيد صفًا لتسليم عدة قيم دفعة واحدة؛ ويفكّكها المستدعي عند الدخول:
def size_of(rect):
return (rect[2] - rect[0], rect[3] - rect[1])
width, height = size_of((10, 20, 110, 140))
# width = 100, height = 120
الأقواس على return اختيارية -- فـ return a, b المجرّدة هي صف أيضًا.
2.8.6. الصف مقابل القائمة#
دليل عملي لأيهما تختار:
الصف للبيانات ثابتة الشكل، التي غالبًا ما تكون غير متجانسة: نقاط
(x, y)، وألوان(r, g, b)، وقيم إرجاع متعددة، ووسائط دوال مُحزّمة للاستخدام لاحقًا.القائمة للبيانات متغيرة الطول، التي غالبًا ما تكون متجانسة: قائمة قياسات، أو طابور عناصر للمعالجة، أو أي شيء تتوقع الإلحاق إليه.
الصفوف أيضًا قابلة للتجزئة (طالما أن كل عنصر بداخلها قابل للتجزئة)، لذا يمكن استخدامها كمفاتيح في dict.