الفرق بين المراجعتين لصفحة: «Python/Pickler»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 13: | سطر 13: | ||
=== <code>file</code> === | === <code>file</code> === | ||
يجب أن يمتلك كائن الملفّ تابع write() يستقبل معامل بايتات واحدًا فقط؛ لهذا يمكن أن يكون ملفًّا مخزّنًا في القرص الصلب مفتوحًا لكتابة البيانات الثنائية، أو نسخة من io. | يجب أن يمتلك كائن الملفّ تابع <code>write()</code> يستقبل معامل بايتات واحدًا فقط؛ لهذا يمكن أن يكون ملفًّا مخزّنًا في القرص الصلب مفتوحًا لكتابة البيانات الثنائية، أو نسخة من <code>io.BytesIO</code>، أو أي كائن مخصّص آخر يطابق هذه الشروط. | ||
=== <code>protocol</code> === | === <code>protocol</code> === | ||
معامل اختياري، وهو عدد صحيح يُعلم المُسلسِل باستخدام البرتوكول المحدّد بالرقم المعطى، والبروتوكولات المدعومة هي من 0 إلى قيمة الثابت HIGHEST_PROTOCOL. | معامل اختياري، وهو عدد صحيح يُعلم المُسلسِل باستخدام البرتوكول المحدّد بالرقم المعطى، والبروتوكولات المدعومة هي من <code>0</code> إلى قيمة الثابت <code>HIGHEST_PROTOCOL</code>. | ||
=== <code>*</code> === | === <code>*</code> === | ||
معامل اختياري، وهو عدد صحيح يخبر المُسَلسِل بأن يستخدم البروتوكول المعطى. البروتوكولات المدعومة هي من 0 إلى HIGHEST_PROTOCOL. وفي حال عدم تحديد قيمة هذا المعامل تكون القيمة الافتراضية هي قيمة الثابت | معامل اختياري، وهو عدد صحيح يخبر المُسَلسِل بأن يستخدم البروتوكول المعطى. البروتوكولات المدعومة هي من <code>0</code> إلى قيمة الثابت <code>HIGHEST_PROTOCOL</code>. وفي حال عدم تحديد قيمة هذا المعامل تكون القيمة الافتراضية هي قيمة الثابت <code>DEFAULT_PROTOCOL</code>، أما في حال تقديم رقم سالب فإنّ الدالة ستختار قيمة الثابت <code>HIGHEST_PROTOCOL</code>. | ||
=== <code>fix_imports</code> === | === <code>fix_imports</code> === | ||
إن أخذ هذا المعامل القيمة True وكانت قيمة المعامل protocol أقل من | إن أخذ هذا المعامل القيمة <code>True</code> وكانت قيمة المعامل <code>protocol</code> أقل من <code>3</code>، فإنّ وحدة <code>[[Python/pickle|pickle]]</code> ستحاول ربط الأسماء الجديدة في الإصدار 3 من بايثون بأسماء الوحدات القديمة المستخدمة في الإصدار 2 من بايثون، بحيث يكون تدفق البيانات مقروءًا في الإصدار 2 من بايثون. | ||
== توابع الصنف <code>Pickler</code> == | == توابع الصنف <code>Pickler</code> == | ||
== التابع <code>dump()</code> == | === التابع <code>[[Python/Pickler/dump|dump()]]</code> === | ||
يكتب التابع تمثيلًا مُسلسَلًا للكائن المُعطى في كائن الملف المفتوح والمحدّد في الدالة البانية للصنف. | |||
== التابع <code>persistent_id()</code> == | === التابع <code>[[Python/Pickler/persistent id|persistent_id()]]</code> === | ||
لا يؤدي هذا التابع افتراضيًا أي وظيفة، والهدف من وجوده هو إمكانية إعادة تعريفه override بواسطة صنف فرعي. | |||
== خصائص الصنف <code>Pickler</code> == | == خصائص الصنف <code>Pickler</code> == | ||
سطر 38: | سطر 39: | ||
=== <code>dispatch_table</code> === | === <code>dispatch_table</code> === | ||
جدول الإرسال dispatch table الخاص بكائنات pickler هو سجلّ لدوال الاختزال reduction functions التي تكون من النوع الذي يمكن التصريح عنه بواسطة الدالة copyreg.pickle(). هذا الجدول هو كائن ربط mapping تكون مفاتيحه أصنافًا وقيمه دوال اختزال. تأخذ دالة الاختزال معاملًا واحدًا من معاملات الصنف المرتبط بها، ويجب أن تكون واجهتها مطابقة لواجهة التابع | جدول الإرسال dispatch table الخاص بكائنات <code>pickler</code> هو سجلّ لدوال الاختزال reduction functions التي تكون من النوع الذي يمكن التصريح عنه بواسطة الدالة <code>[[Python/copyreg/pickle|copyreg.pickle()]]</code>. هذا الجدول هو كائن ربط mapping تكون مفاتيحه أصنافًا وقيمه دوال اختزال. تأخذ دالة الاختزال معاملًا واحدًا من معاملات الصنف المرتبط بها، ويجب أن تكون واجهتها مطابقة لواجهة التابع <code>__reduce__()</code>. | ||
لا يمتلك كائن pickler افتراضيًا الخاصية | لا يمتلك كائن <code>pickler</code> افتراضيًا الخاصية <code>dispatch_table</code>، وسيستخدم عوضًا عنها جدول الإرسال الذي تتحكم به وحدة <code>[[Python/copyreg|copyreg]]</code>. ولكن يمكن تخصيص عملية السلسلة لكائن <code>pickler</code> معيّن عن طريق جعل خاصية <code>dispatch_table</code> تتصرّف ككائن شبيه بالقواميس. أما إن امتلك الصنف المتفرّع من الصنف <code>Pickler</code> خاصية <code>dispatch_table</code> فإنّها ستستخدم حينئذٍ كجدول إرسال افتراضي لنسخ ذلك الصنف. | ||
راجع قسم جداول الإرسال للاطلاع على الأمثلة. | راجع [[Python/pickle#.D8.AC.D8.AF.D8.A7.D9.88.D9.84 .D8.A7.D9.84.D8.A5.D8.B1.D8.B3.D8.A7.D9.84 Dispatch Tables|قسم جداول الإرسال]] في وحدة <code>pickle</code> للاطلاع على الأمثلة. | ||
ملاحظة: هذه الخاصية جديدة في الإصدار 3.3 من بايثون. | '''ملاحظة:''' هذه الخاصية جديدة في الإصدار 3.3 من بايثون. | ||
=== <code>fast</code> === | === <code>fast</code> === | ||
هذه الخاصية مهملة. تفعّل هذه الخاصية النمط السريع fast mode إن أخذت القيمة True. يعطّل النمط السريع استخدام المذكرة memo، الأمر الذي يساهم في تسريع عملية السلسلة وذلك بعدم إنتاج شيفرة عمليات PUT فائضة عن الحاجة. يجب عدم استخدام هذه الخاصية مع الكائنات التي تمتلك إشارت إلى نفسها، لأنّ ذلك سيدخل كائن Pickler حلقة لا نهائية. | هذه الخاصية مهملة. تفعّل هذه الخاصية النمط السريع fast mode إن أخذت القيمة <code>True</code>. يعطّل النمط السريع استخدام المذكرة memo، الأمر الذي يساهم في تسريع عملية السلسلة وذلك بعدم إنتاج شيفرة عمليات <code>PUT</code> فائضة عن الحاجة. يجب عدم استخدام هذه الخاصية مع الكائنات التي تمتلك إشارت إلى نفسها، لأنّ ذلك سيدخل كائن <code>Pickler</code> حلقة لا نهائية. | ||
يمكنك استخدام الدالة pickletools.optimize() إن كنت بحاجة إلى عمليات سلسلة مضغوطة ولا تستهلك مساحة كبيرة. | يمكنك استخدام الدالة <code>[[Python/pickletools/optimize|pickletools.optimize()]]</code> إن كنت بحاجة إلى عمليات سلسلة مضغوطة ولا تستهلك مساحة كبيرة. | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* الصنف <code>Unpickler</code> : يستخدم هذا الصنف ملفًّا ثنائيًا يقرأ منه تدفق البيانات المسلسلة. | * [[Python/Unpickler|الصنف <code>Unpickler</code>]] : يستخدم هذا الصنف ملفًّا ثنائيًا يقرأ منه تدفق البيانات المسلسلة. | ||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 14:54، 20 سبتمبر 2018
يستخدم هذا الصنف ملفًّا يكتب فيه تدفق البيانات المسلسلة.
البنية العامة
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
: يستخدم هذا الصنف ملفًّا ثنائيًا يقرأ منه تدفق البيانات المسلسلة.