الصنف pickle.Pickler()‎ في بايثون

من موسوعة حسوب
مراجعة 14:54، 20 سبتمبر 2018 بواسطة Mohammed Taher (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)


يستخدم هذا الصنف ملفًّا يكتب فيه تدفق البيانات المسلسلة.

البنية العامة

class pickle.Pickler(file, protocol=None, *, fix_imports=True)

المعاملات

file

يجب أن يمتلك كائن الملفّ تابع write()‎ يستقبل معامل بايتات واحدًا فقط؛ لهذا يمكن أن يكون ملفًّا مخزّنًا في القرص الصلب مفتوحًا لكتابة البيانات الثنائية، أو نسخة من io.BytesIO، أو أي كائن مخصّص آخر يطابق هذه الشروط.

protocol

معامل اختياري، وهو عدد صحيح يُعلم المُسلسِل باستخدام البرتوكول المحدّد بالرقم المعطى، والبروتوكولات المدعومة هي من 0 إلى قيمة الثابت HIGHEST_PROTOCOL.

*

معامل اختياري، وهو عدد صحيح يخبر المُسَلسِل بأن يستخدم البروتوكول المعطى. البروتوكولات المدعومة هي من 0 إلى قيمة الثابت HIGHEST_PROTOCOL. وفي حال عدم تحديد قيمة هذا المعامل تكون القيمة الافتراضية هي قيمة الثابت DEFAULT_PROTOCOL، أما في حال تقديم رقم سالب فإنّ الدالة ستختار قيمة الثابت HIGHEST_PROTOCOL.

fix_imports

إن أخذ هذا المعامل القيمة True وكانت قيمة المعامل protocol أقل من 3، فإنّ وحدة pickle ستحاول ربط الأسماء الجديدة في الإصدار 3 من بايثون بأسماء الوحدات القديمة المستخدمة في الإصدار 2 من بايثون، بحيث يكون تدفق البيانات مقروءًا في الإصدار 2 من بايثون.

توابع الصنف Pickler

التابع dump()‎

يكتب التابع تمثيلًا مُسلسَلًا للكائن المُعطى في كائن الملف المفتوح والمحدّد في الدالة البانية للصنف.

التابع persistent_id()

لا يؤدي هذا التابع افتراضيًا أي وظيفة، والهدف من وجوده هو إمكانية إعادة تعريفه override بواسطة صنف فرعي.

خصائص الصنف Pickler

dispatch_table

جدول الإرسال dispatch table الخاص بكائنات pickler هو سجلّ لدوال الاختزال reduction functions التي تكون من النوع الذي يمكن التصريح عنه بواسطة الدالة copyreg.pickle()‎. هذا الجدول هو كائن ربط mapping تكون مفاتيحه أصنافًا وقيمه دوال اختزال. تأخذ دالة الاختزال معاملًا واحدًا من معاملات الصنف المرتبط بها، ويجب أن تكون واجهتها مطابقة لواجهة التابع ‎__reduce__()‎.

لا يمتلك كائن pickler افتراضيًا الخاصية dispatch_table، وسيستخدم عوضًا عنها جدول الإرسال الذي تتحكم به وحدة copyreg. ولكن يمكن تخصيص عملية السلسلة لكائن pickler معيّن عن طريق جعل خاصية dispatch_table تتصرّف ككائن شبيه بالقواميس. أما إن امتلك الصنف المتفرّع من الصنف Pickler خاصية dispatch_table فإنّها ستستخدم حينئذٍ كجدول إرسال افتراضي لنسخ ذلك الصنف.

راجع قسم جداول الإرسال في وحدة pickle للاطلاع على الأمثلة.

ملاحظة: هذه الخاصية جديدة في الإصدار 3.3 من بايثون.

fast

هذه الخاصية مهملة. تفعّل هذه الخاصية النمط السريع fast mode إن أخذت القيمة True. يعطّل النمط السريع استخدام المذكرة memo، الأمر الذي يساهم في تسريع عملية السلسلة وذلك بعدم إنتاج شيفرة عمليات PUT فائضة عن الحاجة. يجب عدم استخدام هذه الخاصية مع الكائنات التي تمتلك إشارت إلى نفسها، لأنّ ذلك سيدخل كائن Pickler حلقة لا نهائية.

يمكنك استخدام الدالة pickletools.optimize()‎ إن كنت بحاجة إلى عمليات سلسلة مضغوطة ولا تستهلك مساحة كبيرة.

انظر أيضًا

  • الصنف Unpickler : يستخدم هذا الصنف ملفًّا ثنائيًا يقرأ منه تدفق البيانات المسلسلة.

مصادر