الوحدة marshal
في بايثون
تضمّ هذه الوحدة مجموعة من الدوال التي يمكنها قراءة وكتابة قيم بايثون بالصيغة الثنائية binary format. هذه الصيغة خاصة ببايثون، ولكنّها مستقلّة عن معمارية الجهاز الذي تعمل عليه الشيفرة (مثلًا، يمكنك كتابة قيمة بايثون في ملف على نظام ويندوز، ثم نقل الملف إلى نظام Sun وقراءته فيه).
لم يجر توثيق التفاصيل الخاصّة بهذه الصيغة عن عمد، وذلك لأنّها عرضة للتغيير بين إصدارات بايثون المختلفة (بالرغم من أن ذلك نادر الحدوث).
تأثّر اسم هذه الوحدة تأثّرًا كبيرًا بالتسمية التي اعتمدها مصمّمو لغة Modula-3 لهذه العملية، إذ يستخدم هؤلاء المصطلح "marshalling" للتعبير عن عملية نقل البيانات بهيئة ذاتية الاحتواء. لو أخذنا المعنى الدقيق للكلمة فإنّ الفعل "to marshal" يعني تحويل نوع معين من البيانات من الصيغة الداخلية إلى الخارجية (في ذاكرة RPC على سبيل المثال)، أما مصطلح "unmarshalling" فيشير إلى عكس هذه العملية.
هذه الوحدة ليست وحدة "مستمّرة persistent" عامة. راجع الوحدتين pickle
و shelve
للاطلاع على استمرارية كائنات بايثون ونقلها عن طريق الاستدعاءات الإجرائية البعيدة RPC.
إنّ الهدف الرئيس من وحدة marshal
هو السماح لوحدات بايثون بقراءة الشيفرة شبه المصرّفة وكتابتها في الملفات ذات الامتداد .pyc
. وهكذا يحتفظ المطوّر بلغة بايثون الحق في تعديل صيغة الترتيب بطريقة لا تتوافق مع الإصدارات السابقة من اللغة وحسب ما تقتضيه الحاجة. إن كنت تريد سَلسَلة كائنات بايثون وإلغاء سلسلتها، فعليك باستخدام الوحدة pickle
التي تقدّم أداءً مقاربًا لأداء وحدة marshal
، وهي مستقلّة عن إصدارات بايثون، وتدعم نطاقًا أوسع من كائنات بايثون مقارنة بوحدة marshal
.
تحذير:
إنّ وحدة marshal
غير معدّة لتكون آمنة تجاه البيانات الخطيرة أو التي تحتوي على الأخطاء. لا تلغِ ترتيب أي بيانات من مصادر غير موثوقة أو معرّفة.
لا تدعم وحدة marshal
جميع كائنات بايثون. تدعم هذه الوحدة -عامّةَ- الكائنات التي تكون مستقلة عن نوع معيّن من الاستدعاءات في بايثون.
تدعم هذه الوحدة الأنواع التالية:
- القيم البوليانية
booleans
- الأعداد الصحيحة
- الأعداد العشرية ذات الفاصلة العائمة
- الأعداد المركبة
- السلاسل النصية
- البايتات
- مصفوفات البايتات
- القوائم
- المجموعات
- المجموعات المجمدة
- القواميس
- كائنات code
يجب الانتباه إلى أنّ الصفوف والقوائم والمجموعات والمجموعات المجمّدة والقواميس مدعومة بشرط أن تحتوي على قيم قابلة للترتيب بحد ذاتها.
يمكن ترتيب وإلغاء ترتيب الأنواع المنفردة وهي None
والنقاط الثلاثة Ellipsis
و StopIteration
.
لا يمكن كتابة القوائم التعاودية والمجموعات والقواميس في الإصدارات الأدنى من الإصدار 3 (انظر أدناه).
تقدّم الدالة بعض الدوال التي تقرأ وتكتب الملفات إلى جانب دوالّ أخرى تعمل على الكائنات الشبيهة بالبايتات.
دوال الوحدة marshal
تعرّف الوحدة الدوال التالية:
الدالة marshal.dump()
تكتب الدالة القيمة المعطاة في الملف المفتوح.
الدالة marshal.load()
تقرأ الدالة قيمة واحدة من الملف المفتوح وتعيدها.
الدالة marshal.dumps()
تعيد الدالة كائن bytes الذي ستجري كتابته في ملفّ معين بواسطة الدالة dump(value, file)
.
الدالة marshal.loads()
تحوّل الدالة الكائنات الشبيهة بالبايتات إلى قيمة.
ثوابت الوحدة marshal
تعرّف الدالة الثوابت التالية:
الثابت marshal.version
يحدّد هذا الثابت التنسيق الذي تستخدمه الوحدة. الإصدار 0 هو الإصدار الأقدم، أما الإصدار 1 فيشارك السلاسل النصية المقيّدة interned strings ويستخدم الإصدار 2 تنسيقًا ثنائيًا للتعامل مع الأرقام العشرية ذات الفاصلة العائمة. أضاف الإصدار الثالث الدعم لنسخ الكائنات والتعاودية. أما الإصدار الحالية فهو الإصدار 4.