فهم دالة collections.namedtuple() لإنشاء تسميات للصفوف في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 21 سبتمبر 2024

محتوى المقال

فهم دالة collections.namedtuple() لإنشاء تسميات للصفوف في Python

دالة namedtuple() في مكتبة collections في Python هي أداة قوية تسمح لك بإنشاء أنواع بيانات مخصصة مع تسميات للحقول بدلاً من استخدام الفهارس العددية كما هو الحال مع الـ tuples العادية. باستخدام namedtuple، يمكنك الوصول إلى عناصر tuple باستخدام أسماء الحقول، مما يجعل الكود أكثر قابلية للفهم والصيانة.

ما هي دالة namedtuple()؟

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

على سبيل المثال، يمكنك استخدام namedtuple() لإنشاء كائن يمثل شخصًا، بحيث يمكنك الوصول إلى اسمه وعمره بسهولة باستخدام أسماء الحقول بدلاً من الفهارس.

كيفية إنشاء namedtuple

لإنشاء namedtuple، يجب استيراد مكتبة collections أولاً ثم استخدام دالة namedtuple() لتحديد اسم النوع وقائمة الحقول.

from collections import namedtuple

# إنشاء namedtuple باسم Person
Person = namedtuple('Person', ['name', 'age', 'city'])

# إنشاء كائن Person
person1 = Person('أحمد', 30, 'القاهرة')

# الوصول إلى الحقول باستخدام الأسماء
print(person1.name) # الناتج: أحمد
print(person1.age) # الناتج: 30
print(person1.city) # الناتج: القاهرة

في هذا المثال، أنشأنا namedtuple يسمى Person مع الحقول name وage وcity. ثم أنشأنا كائنًا يمثل شخصًا محددًا باستخدام namedtuple واستعرضنا البيانات باستخدام أسماء الحقول.

متى نستخدم namedtuple()؟

يمكنك استخدام namedtuple() في العديد من الحالات التي تحتاج فيها إلى هيكل بيانات ثابت يحتوي على حقول مرتبطة. بعض الأمثلة الشائعة لاستخدام namedtuple تشمل:

  • تمثيل كائنات البيانات البسيطة مثل النقاط الجغرافية أو الأشخاص أو السيارات.
  • إرجاع قيم متعددة من دالة واحدة بدون الحاجة إلى استخدام القواميس.
  • تحسين أداء الكود عند العمل مع بيانات ثابتة، حيث أن namedtuple أسرع من القواميس.
  • توفير بنية منظمة لبياناتك مع ضمان عدم تغيير الحقول.

مثال: تمثيل نقطة في الفضاء

لنفترض أننا نريد تمثيل نقطة في الفضاء باستخدام إحداثيات (X، Y). يمكننا استخدام namedtuple لتمثيل هذه النقطة بسهولة.

from collections import namedtuple

# إنشاء namedtuple باسم Point
Point = namedtuple('Point', ['x', 'y'])

# إنشاء نقطة في الفضاء
point = Point(10, 20)

# الوصول إلى القيم باستخدام أسماء الحقول
print(point.x) # الناتج: 10
print(point.y) # الناتج: 20

في هذا المثال، قمنا بتمثيل نقطة في الفضاء باستخدام namedtuple واستعرضنا القيم باستخدام الحقول المسماة x وy.

الخصائص الإضافية لـ namedtuple()

إلى جانب إمكانية الوصول إلى القيم باستخدام الأسماء، توفر namedtuple ميزات أخرى تجعلها أكثر قوة ومرونة:

إمكانية الوصول باستخدام الفهارس

مثل tuple العادية، يمكنك الوصول إلى القيم في namedtuple باستخدام الفهارس.

print(person1[0]) # الناتج: أحمد
print(person1[1]) # الناتج: 30
print(person1[2]) # الناتج: القاهرة

تحويل namedtuple إلى قاموس

يمكنك تحويل كائن namedtuple إلى قاموس باستخدام دالة _asdict(). هذا يمكن أن يكون مفيدًا عند الحاجة إلى العمل مع القيم كقاموس.

print(person1._asdict()) # الناتج: {'name': 'أحمد', 'age': 30, 'city': 'القاهرة'}

استبدال القيم باستخدام _replace()

على الرغم من أن namedtuple غير قابلة للتغيير (immutable)، إلا أنه يمكنك إنشاء نسخة جديدة مع استبدال بعض القيم باستخدام دالة _replace().

person2 = person1._replace(age=31)
print(person2) # الناتج: Person(name='أحمد', age=31, city='القاهرة')

مقارنة بين namedtuple والقواميس

في حين أن القواميس توفر مرونة أكثر في التعامل مع البيانات، فإن namedtuple توفر هيكل بيانات أكثر تنظيماً وأداءً أسرع في بعض الحالات. إليك مقارنة بسيطة:

  • القواميس: توفر مرونة أكثر حيث يمكنك إضافة وحذف المفاتيح بسهولة، لكنها أبطأ في الأداء مقارنة بـ namedtuple.
  • namedtuple: أكثر كفاءة من حيث الأداء وتوفر هيكل بيانات ثابت لا يمكن تغييره بعد الإنشاء، مما يقلل من الأخطاء.

الخلاصة

تعد دالة namedtuple() من مكتبة collections في Python أداة قوية لإنشاء هيكل بيانات ثابت ومنظم يسمح لك بالوصول إلى القيم باستخدام أسماء الحقول. إنها خيار ممتاز عندما تحتاج إلى تمثيل بيانات بسيطة وثابتة مثل السجلات أو الكائنات. باستخدام namedtuple، يمكنك تحسين كفاءة الكود وزيادة وضوحه.

طور مهاراتك: مقالات يجب قراءتها في البرمجة