الفرق بين المراجعتين لصفحة: «Python/tuples»
لا ملخص تعديل |
ط تصحيح رابط القوائم في القسم (إنشاء الصفوف) |
||
(6 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:الصفوف Tuples في بايثون}}</noinclude> | <noinclude>{{DISPLAYTITLE:الصفوف Tuples في بايثون}}</noinclude> | ||
يتكوّن الصفّ من عدد من القيم المفصولة عن بعضها بفاصلة، مثل:<syntaxhighlight lang="python3"> | يتكوّن الصفّ من عدد من القيم المفصولة عن بعضها بفاصلة، مثل:<syntaxhighlight lang="python3"> | ||
>>> t = 12345, 54321, 'hello!' | >>> t = 12345, 54321, 'hello!' | ||
>>> t[0] | >>> t[0] | ||
سطر 7: | سطر 6: | ||
>>> t | >>> t | ||
(12345, 54321, 'hello!') | (12345, 54321, 'hello!') | ||
</syntaxhighlight> | |||
== إنشاء الصفوف == | |||
يكفي لإنشاء الصفوف إسناد أكثر من قيمة إلى متغيّر واحد مع فصل كل قيمة عن الأخرى بفاصلة <code>','</code>:<syntaxhighlight lang="python3"> | |||
>>> t = 12345, 54321, 'hello!' | |||
>>> t[0] | |||
12345 | |||
>>> t | |||
(12345, 54321, 'hello!') | |||
</syntaxhighlight>إيمكن أيضًا استخدام الدالة <code>[[Python/tuple|tuple()]]</code> لإنشاء صف جديد:<syntaxhighlight lang="python3"> | |||
>>>tuple('abc') | |||
('a', 'b', 'c') | |||
>>>tuple([1,2,3]) | |||
(1, 2, 3) | |||
</syntaxhighlight>يستخدم زوج من الأقواس الفارغة لإنشاء صفّ فارغ، ولإنشاء صفٍّ يحتوي على عنصر واحدٍ فقط، يجب أن يكون العنصر الوحيد في الصفّ متبوعًا بفاصلة، ولا يكفي إحاطة القيمة بالأقواس فقط.<syntaxhighlight lang="python3"> | |||
>>> empty = () | |||
>>> singleton = 'hello', # لاحظ الفاصلة في نهاية العبارة | |||
>>> len(empty) | |||
0 | |||
>>> len(singleton) | |||
1 | |||
>>> singleton | |||
('hello',) | |||
</syntaxhighlight> | |||
يمكن للصفوف أن تكون متداخلة، بمعنى أنّه يمكن إنشاء صفوف داخل الصفوف:<syntaxhighlight lang="python3"> | |||
>>> # يمكن للصفوف أن تكون متداخلة: | >>> # يمكن للصفوف أن تكون متداخلة: | ||
... u = t, (1, 2, 3, 4, 5) | ... u = t, (1, 2, 3, 4, 5) | ||
>>> u | >>> u | ||
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) | ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) | ||
</syntaxhighlight>الصفوف من الأنواع غير القابلة للتغيير (immutable) ولكن يمكن لها أن تتضمن كائنات قابلة للتغيير:<syntaxhighlight lang="python3"> | |||
>>> # الصفوف غير قابلة للتغيير | >>> # الصفوف غير قابلة للتغيير | ||
... t[0] = 88888 | ... t[0] = 88888 | ||
سطر 20: | سطر 46: | ||
>>> v | >>> v | ||
([1, 2, 3], [3, 2, 1]) | ([1, 2, 3], [3, 2, 1]) | ||
</syntaxhighlight> | </syntaxhighlight>تحاط الصفوف بالأقواس دائمًا في المخرجات، وبهذا تُمثَّل الصفوف المتداخلة بصورة صحيحة. يمكن استخدام الأقواس أو الاستغناء عنها عند إنشاء الصفوف، ولكن في بعض الأحيان يصبح استخدامها إلزاميًا (إن كان الصف جزءًا من تعبير أكبر). | ||
تحاط الصفوف بالأقواس دائمًا في المخرجات، وبهذا | |||
لا يمكن إسناد قيم إلى عناصر الصف، ولكن يمكن إنشاء صفوف تتضمن كائنات قابلة للتغيير مثل [[Python | لا يمكن إسناد قيم إلى عناصر الصف، ولكن يمكن إنشاء صفوف تتضمن كائنات قابلة للتغيير مثل [[Python/list|القوائم]]. | ||
قد تبدو الصفوف و<nowiki/>[[Python | قد تبدو الصفوف و<nowiki/>[[Python/list|القوائم]] متشابهة، ولكنّها غالبًا ما تستخدم في حالات مختلفة ولأغراض متباينة. فالصفوف غير قابلة للتغيير، وتتضمّن عادة تسلسلًا من عناصر ذات أنواع مختلفة، ويمكن الوصول إليها من خلال فك التحزيم (unpacking) أو الفهرسة (indexing) أو حتى بواسطة الخاصية في حالة [[#الصفوف المسمّاة named tuples|الصفوف المسمّاة named tuples]] (راجع الصفوف المسمّاة أدناه). أما [[Python/list|القوائم]] فقابلة للتغيير، وعادة ما تكون عناصرها متجانسة (أي من النوع ذاته) ويمكن الوصول إليها عن طريق المرور على القائمة. | ||
العبارة <code>t = 12345, 54321, 'hello!'</code> هي مثال عن تحزيم الصف، إذ تحزّم القيم <code>12345</code> و <code>54321</code> و <code>'hello!'</code> جميعها في صفّ واحد. | العبارة <code>t = 12345, 54321, 'hello!'</code> هي مثال عن تحزيم الصف، إذ تحزّم القيم <code>12345</code> و <code>54321</code> و <code>'hello!'</code> جميعها في صفّ واحد. | ||
يمكن أيضًا إجراء العملية العكسية:<syntaxhighlight lang="python3"> | يمكن أيضًا إجراء العملية العكسية:<syntaxhighlight lang="python3"> | ||
>>> x, y, z = t | >>> x, y, z = t | ||
</syntaxhighlight>تدعى هذه العملية بفك تحزيم التسلسل (sequence unpacking) ويمكن استخدام أي نوع من أنواع التسلسلات في الجانب الأيمن من عملية الإسناد. تتطلب عملية فك تحزيم التسلسل أن يكون عدد المتغيرات في الجانب الأيسر من عملية الإسناد مساويًا لعدد العناصر الموجودة في التسلسل. | </syntaxhighlight>تدعى هذه العملية بفك تحزيم التسلسل (sequence unpacking) ويمكن استخدام أي نوع من أنواع التسلسلات في الجانب الأيمن من عملية الإسناد. تتطلب عملية فك تحزيم التسلسل أن يكون عدد المتغيرات في الجانب الأيسر من عملية الإسناد مساويًا لعدد العناصر الموجودة في التسلسل. | ||
سطر 56: | سطر 63: | ||
تعطي الصفوف المسمّاة معنى لكل عنصر ضمن الصف، وينتج عن ذلك شيفرة أسهل في القراءة وموثّقة ذاتيًّا. يمكن استخدام الصفوف المسمّاة في أيّ مكان تستخدم فيه الصفوف العادية، وتمتاز بإمكانية الوصول إلى الحقول عن طريق الأسماء بدلًا من فهرس العنصر. | تعطي الصفوف المسمّاة معنى لكل عنصر ضمن الصف، وينتج عن ذلك شيفرة أسهل في القراءة وموثّقة ذاتيًّا. يمكن استخدام الصفوف المسمّاة في أيّ مكان تستخدم فيه الصفوف العادية، وتمتاز بإمكانية الوصول إلى الحقول عن طريق الأسماء بدلًا من فهرس العنصر. | ||
يعطي المثال التالي صورة عامة عن الصفوف المسمّأة وكيفية استخدامها: | |||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
>>> Point = namedtuple('Point', ['x', 'y']) | >>> Point = namedtuple('Point', ['x', 'y']) | ||
سطر 87: | سطر 77: | ||
>>> p # تمثيل سهل القراءة | >>> p # تمثيل سهل القراءة | ||
Point(x=11, y=22) | Point(x=11, y=22) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
راجع كائنات [[Python/namedtuple|<code>namedtuple</code>]] التي تقدّمها وحدة [[Python/collections|<code>collections</code>]] للاطلاع على المزيد من المعلومات حول الصفوف المسمّاة. | |||
* | == انظر أيضًا == | ||
* [[Python/list|القوائم list في بايثون]]. | |||
* [[Python/dict|القواميس dict في بايثون]]. | |||
* [[Python/set|المجموعات set في بايثون]]. | |||
* الدالة <code>[[Python/tuple|tuple()]]</code>: تعيد صفًا يُولَّد من الكائن القابل للتّكرار المُعطى. | |||
* [[Python/namedtuple|كائنات <code>namedtuple</code> في بايثون.]] | |||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 19:23، 2 يناير 2021
يتكوّن الصفّ من عدد من القيم المفصولة عن بعضها بفاصلة، مثل:
>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
إنشاء الصفوف
يكفي لإنشاء الصفوف إسناد أكثر من قيمة إلى متغيّر واحد مع فصل كل قيمة عن الأخرى بفاصلة ','
:
>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
إيمكن أيضًا استخدام الدالة tuple()
لإنشاء صف جديد:
>>>tuple('abc')
('a', 'b', 'c')
>>>tuple([1,2,3])
(1, 2, 3)
يستخدم زوج من الأقواس الفارغة لإنشاء صفّ فارغ، ولإنشاء صفٍّ يحتوي على عنصر واحدٍ فقط، يجب أن يكون العنصر الوحيد في الصفّ متبوعًا بفاصلة، ولا يكفي إحاطة القيمة بالأقواس فقط.
>>> empty = ()
>>> singleton = 'hello', # لاحظ الفاصلة في نهاية العبارة
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
يمكن للصفوف أن تكون متداخلة، بمعنى أنّه يمكن إنشاء صفوف داخل الصفوف:
>>> # يمكن للصفوف أن تكون متداخلة:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
الصفوف من الأنواع غير القابلة للتغيير (immutable) ولكن يمكن لها أن تتضمن كائنات قابلة للتغيير:
>>> # الصفوف غير قابلة للتغيير
... t[0] = 88888
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # ولكن يمكن أن تحتوي على كائنات قابلة للتغيير
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])
تحاط الصفوف بالأقواس دائمًا في المخرجات، وبهذا تُمثَّل الصفوف المتداخلة بصورة صحيحة. يمكن استخدام الأقواس أو الاستغناء عنها عند إنشاء الصفوف، ولكن في بعض الأحيان يصبح استخدامها إلزاميًا (إن كان الصف جزءًا من تعبير أكبر).
لا يمكن إسناد قيم إلى عناصر الصف، ولكن يمكن إنشاء صفوف تتضمن كائنات قابلة للتغيير مثل القوائم.
قد تبدو الصفوف والقوائم متشابهة، ولكنّها غالبًا ما تستخدم في حالات مختلفة ولأغراض متباينة. فالصفوف غير قابلة للتغيير، وتتضمّن عادة تسلسلًا من عناصر ذات أنواع مختلفة، ويمكن الوصول إليها من خلال فك التحزيم (unpacking) أو الفهرسة (indexing) أو حتى بواسطة الخاصية في حالة الصفوف المسمّاة named tuples (راجع الصفوف المسمّاة أدناه). أما القوائم فقابلة للتغيير، وعادة ما تكون عناصرها متجانسة (أي من النوع ذاته) ويمكن الوصول إليها عن طريق المرور على القائمة.
العبارة t = 12345, 54321, 'hello!'
هي مثال عن تحزيم الصف، إذ تحزّم القيم 12345
و 54321
و 'hello!'
جميعها في صفّ واحد.
يمكن أيضًا إجراء العملية العكسية:
>>> x, y, z = t
تدعى هذه العملية بفك تحزيم التسلسل (sequence unpacking) ويمكن استخدام أي نوع من أنواع التسلسلات في الجانب الأيمن من عملية الإسناد. تتطلب عملية فك تحزيم التسلسل أن يكون عدد المتغيرات في الجانب الأيسر من عملية الإسناد مساويًا لعدد العناصر الموجودة في التسلسل.
لاحظ أن عملية الإسناد المتعددة هي في الواقع دمج لعمليتي تحزيم الصف وفك تحزيم التسلسل.
الصفوف المسمّاة (named tuples)
تعطي الصفوف المسمّاة معنى لكل عنصر ضمن الصف، وينتج عن ذلك شيفرة أسهل في القراءة وموثّقة ذاتيًّا. يمكن استخدام الصفوف المسمّاة في أيّ مكان تستخدم فيه الصفوف العادية، وتمتاز بإمكانية الوصول إلى الحقول عن طريق الأسماء بدلًا من فهرس العنصر.
يعطي المثال التالي صورة عامة عن الصفوف المسمّأة وكيفية استخدامها:
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(11, y=22) # إنشاء نسخة باستخدام وسائط موقعية أو مفتاحية
>>> p[0] + p[1] # يمكن فهرستها مثل الصفوف العادية
33
>>> x, y = p # فك التحزيم مثل الصفوف العادية
>>> x, y
(11, 22)
>>> p.x + p.y # يمكن الوصول إلى الحقول عن طريق اسمائها
33
>>> p # تمثيل سهل القراءة
Point(x=11, y=22)
راجع كائنات namedtuple
التي تقدّمها وحدة collections
للاطلاع على المزيد من المعلومات حول الصفوف المسمّاة.
انظر أيضًا
- القوائم list في بايثون.
- القواميس dict في بايثون.
- المجموعات set في بايثون.
- الدالة
tuple()
: تعيد صفًا يُولَّد من الكائن القابل للتّكرار المُعطى. - كائنات
namedtuple
في بايثون.
مصادر
- صفحة Built-in Types في توثيق بايثون الرسمي.
- قسم namedtuple في توثيق بايثون الرسمي.