الوحدة marshal‎ في بايثون

من موسوعة حسوب

تضمّ هذه الوحدة مجموعة من الدوال التي يمكنها قراءة وكتابة قيم بايثون بالصيغة الثنائية binary format. هذه الصيغة خاصة ببايثون، ولكنّها مستقلّة عن معمارية الجهاز الذي تعمل عليه الشيفرة (مثلًا، يمكنك كتابة قيمة بايثون في ملف على نظام ويندوز، ثم نقل الملف إلى نظام Sun وقراءته فيه).

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

تأثّر اسم هذه الوحدة تأثّرًا كبيرًا بالتسمية التي اعتمدها مصمّمو لغة Modula-3 لهذه العملية، إذ يستخدم هؤلاء المصطلح "marshalling" للتعبير عن عملية نقل البيانات بهيئة ذاتية الاحتواء. لو أخذنا المعنى الدقيق للكلمة فإنّ الفعل "to marshal" يعني تحويل نوع معين من البيانات من الصيغة الداخلية إلى الخارجية (في ذاكرة RPC على سبيل المثال)، أما مصطلح "unmarshalling" فيشير إلى عكس هذه العملية.

هذه الوحدة ليست وحدة "مستمّرة persistent" عامة. راجع الوحدتين pickle و shelve للاطلاع على استمرارية كائنات بايثون ونقلها عن طريق الاستدعاءات الإجرائية البعيدة RPC.

إنّ الهدف الرئيس من وحدة marshal هو السماح لوحدات بايثون بقراءة الشيفرة شبه المصرّفة وكتابتها في الملفات ذات الامتداد ‎.pyc. وهكذا يحتفظ المطوّر بلغة بايثون الحق في تعديل صيغة الترتيب بطريقة لا تتوافق مع الإصدارات السابقة من اللغة وحسب ما تقتضيه الحاجة. إن كنت تريد سَلسَلة كائنات بايثون وإلغاء سلسلتها، فعليك باستخدام الوحدة pickle التي تقدّم أداءً مقاربًا لأداء وحدة marshal، وهي مستقلّة عن إصدارات بايثون، وتدعم نطاقًا أوسع من كائنات بايثون مقارنة بوحدة marshal.

تحذير:

إنّ وحدة marshal غير معدّة لتكون آمنة تجاه البيانات الخطيرة أو التي تحتوي على الأخطاء. لا تلغِ ترتيب أي بيانات من مصادر غير موثوقة أو معرّفة.

لا تدعم وحدة marshal جميع كائنات بايثون. تدعم هذه الوحدة -عامّةَ- الكائنات التي تكون مستقلة عن نوع معيّن من الاستدعاءات في بايثون.

تدعم هذه الوحدة الأنواع التالية:

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

يمكن ترتيب وإلغاء ترتيب الأنواع المنفردة وهي 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.

انظر أيضًا

مصادر