الفرق بين المراجعتين لصفحة: «Python/shelve/open»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الدالة <code>shelve.open()</code> في بايثون}}</noinclude> تفتح الدالة قاموسًا مستمرًّا. == البن...' |
|||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 8: | سطر 8: | ||
shelve.open(filename, flag='c', protocol=None, writeback=False) | shelve.open(filename, flag='c', protocol=None, writeback=False) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == المعاملات == | ||
=== <code>filename</code> === | === <code>filename</code> === | ||
سطر 15: | سطر 15: | ||
=== <code>flag</code> === | === <code>flag</code> === | ||
معامل اختياري وهو مشابه للمعامل flag في الدالة dbm.open(). | معامل اختياري وهو مشابه للمعامل <code>flag</code> في الدالة <code>dbm.open()</code>. | ||
=== <code>protocol</code> === | === <code>protocol</code> === | ||
تستخدم الوحدة افتراضيًا الإصدار 3 من pickle لسلسلة القيم، ويمكن تحديد إصدار بروتوكول السَلسَلة باستخدام المعامل protocol. | تستخدم الوحدة افتراضيًا الإصدار 3 من <code>pickle</code> لسلسلة القيم، ويمكن تحديد إصدار بروتوكول السَلسَلة باستخدام المعامل <code>protocol</code>. | ||
=== <code>writeback</code> === | === <code>writeback</code> === | ||
لا يستطيع الرفّ -بسبب طبيعة لغة بايثون- معرفة اللحظة التي تجرى فيها التعديلات على قاموس مستمرّ قابل للتعديل. تُكتب الكائنات المعدّلة افتراضيًا عند إسنادها إلى الرفّ فقط (راجع المثال). إن أخذ المعامل الاختياري writeback القيمة | لا يستطيع الرفّ -بسبب طبيعة لغة بايثون- معرفة اللحظة التي تجرى فيها التعديلات على قاموس مستمرّ قابل للتعديل. تُكتب الكائنات المعدّلة افتراضيًا عند إسنادها إلى الرفّ فقط ([[Python/shelve#.D8.A3.D9.85.D8.AB.D9.84.D8.A9|راجع المثال في وحدة <code>shelve</code>]]). إن أخذ المعامل الاختياري <code>writeback</code> القيمة <code>True</code>، فإنّ جميع المدخلات التي تم الوصول إليها ستُخزن في الذاكرة المخبئية، ويعاد كتابتها عند استدعاء التابعين <code>sync()</code> و <code>close()</code>. يسهّل هذا الأمر عملية تعديل المدخلات القابلة للتعديل mutable في القاموس المستمر، ولكن في حال الوصول إلى عدد كبير من العناصر سيكون مقدار الذاكرة المستهلكة كبيرًا جدًّا الأمر الذي قد يؤدي إلى جعل عملية الإغلاق بطيئة للغاية وذلك لأنّ جميع العناصر التي تم الوصول إليها سيعاد كتابتها (لا توجد طريقة لتمييز العناصر القابلة للكتابة من بين العناصر التي يتم الوصول إليها، ولا توجد طريقة لتمييز العناصر المعدّلة أصلًا). | ||
ملاحظة: | '''ملاحظة:''' | ||
لا تتوقع أن يُغلق الرفّ تلقائيًا بل استدعِ الدالة close() دائمًا عندما لا تحتاج إلى استخدام الرف أو استخدم الدالة shelve.open() كمدير للسياق: | |||
لا تتوقع أن يُغلق الرفّ تلقائيًا بل استدعِ الدالة <code>close()</code> دائمًا عندما لا تحتاج إلى استخدام الرف أو استخدم الدالة <code>shelve.open()</code> كمدير للسياق:<syntaxhighlight lang="python3"> | |||
with shelve.open('spam') as db: | with shelve.open('spam') as db: | ||
db['eggs'] = 'eggs' | |||
</syntaxhighlight> | |||
== مصادر == | == مصادر == | ||
[https://docs.python.org/3/library/shelve.html#shelve.open صفحة Python object persistence في توثيق بايثون الرسمي.] | [https://docs.python.org/3/library/shelve.html#shelve.open صفحة Python object persistence في توثيق بايثون الرسمي.] |
المراجعة الحالية بتاريخ 20:19، 20 سبتمبر 2018
تفتح الدالة قاموسًا مستمرًّا.
البنية العامة
shelve.open(filename, flag='c', protocol=None, writeback=False)
المعاملات
filename
اسم الملف الأساسي لقاعدة البيانات الداخلية. يمكن إضافة امتداد إلى اسم الملف ويمكن أيضًا إنشاء ملفات متعددة. تفتح الدالة افتراضيًا ملف قاعدة البيانات الداخلي في وضعي القراءة والكتابة.
flag
معامل اختياري وهو مشابه للمعامل flag
في الدالة dbm.open()
.
protocol
تستخدم الوحدة افتراضيًا الإصدار 3 من pickle
لسلسلة القيم، ويمكن تحديد إصدار بروتوكول السَلسَلة باستخدام المعامل protocol
.
writeback
لا يستطيع الرفّ -بسبب طبيعة لغة بايثون- معرفة اللحظة التي تجرى فيها التعديلات على قاموس مستمرّ قابل للتعديل. تُكتب الكائنات المعدّلة افتراضيًا عند إسنادها إلى الرفّ فقط (راجع المثال في وحدة shelve
). إن أخذ المعامل الاختياري writeback
القيمة True
، فإنّ جميع المدخلات التي تم الوصول إليها ستُخزن في الذاكرة المخبئية، ويعاد كتابتها عند استدعاء التابعين sync()
و close()
. يسهّل هذا الأمر عملية تعديل المدخلات القابلة للتعديل mutable في القاموس المستمر، ولكن في حال الوصول إلى عدد كبير من العناصر سيكون مقدار الذاكرة المستهلكة كبيرًا جدًّا الأمر الذي قد يؤدي إلى جعل عملية الإغلاق بطيئة للغاية وذلك لأنّ جميع العناصر التي تم الوصول إليها سيعاد كتابتها (لا توجد طريقة لتمييز العناصر القابلة للكتابة من بين العناصر التي يتم الوصول إليها، ولا توجد طريقة لتمييز العناصر المعدّلة أصلًا).
ملاحظة:
لا تتوقع أن يُغلق الرفّ تلقائيًا بل استدعِ الدالة close()
دائمًا عندما لا تحتاج إلى استخدام الرف أو استخدم الدالة shelve.open()
كمدير للسياق:
with shelve.open('spam') as db:
db['eggs'] = 'eggs'