Python/marshal

من موسوعة حسوب
مراجعة 21:05، 15 سبتمبر 2018 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'تضمّ هذه الوحدة مجموعة من الدوال التي يمكنها قراءة وكتابة قيم بايثون بالصيغة الثنائية binary form...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

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

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

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

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

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

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

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

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

  • القيم البوليانية booleans
  • الأعداد الصحيحة
  • الأعداد العشرية ذات الفاصلة العائمة
  • الأعداد المركبة
  • السلاسل النصية
  • البايتات
  • مصفوفات البايتات
  • القوائم
  • المجموعات
  • المجموعات المجمدة
  • القواميس
  • كائنات code

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

يمكن ترتيب وإلغاء ترتيب الأنواع المنفردة وهي None والنقاط الثلاثة Ellipsis و StopIteration.

لا يمكن كتابة القوائم التعاودية والمجموعات والقواميس في النسخ الأدنى من نسخة التنسيق 3 (انظر أدناه).

تقدّم الدالة بعض الدوال التي تقرأ وتكتب الملفات إلى جانب دوالّ أخرى تعمل على الكائنات الشبيهة بالبايتات.

دوال الوحدة marshal

تعرّف الوحدة الدوال التالية:


ثوابت الوحدة marshal

تعرّف الدالة الثوابت التالية:

الثابت marshal.version

يحدّد هذا الثابت التنسيق الذي تستخدمه الوحدة. الإصدار 0 هو الإصدار الأقدم، أما الإصدار 1 فيشارك السلاسل النصية المقيّدة interned strings ويستخدم الإصدار 2 تنسيقًا ثنائيًا للتعامل مع الأرقام العشرية ذات الفاصلة العائمة. أضاف الإصدار الثالث الدعم لنسخ الكائنات والتعاودية. أما الإصدار الحالية فهو الإصدار 4.