الدالة shelve.open()
في بايثون
تفتح الدالة قاموسًا مستمرًّا.
البنية العامة
shelve.open(filename, flag='c', protocol=None, writeback=False)
المعاملات
filename
اسم الملف الأساسي لقاعدة البيانات الداخلية. يمكن إضافة امتداد إلى اسم الملف ويمكن أيضًا إنشاء ملفات متعددة. تفتح الدالة افتراضيًا ملف قاعدة البيانات الداخلي في وضعي القراءة والكتابة.
flag
معامل اختياري وهو مشابه للمعامل flag في الدالة dbm.open().
protocol
تستخدم الوحدة افتراضيًا الإصدار 3 من pickle لسلسلة القيم، ويمكن تحديد إصدار بروتوكول السَلسَلة باستخدام المعامل protocol.
writeback
لا يستطيع الرفّ -بسبب طبيعة لغة بايثون- معرفة اللحظة التي تجرى فيها التعديلات على قاموس مستمرّ قابل للتعديل. تُكتب الكائنات المعدّلة افتراضيًا عند إسنادها إلى الرفّ فقط (راجع المثال). إن أخذ المعامل الاختياري writeback القيمة True، فإنّ جميع المدخلات التي تم الوصول إليها ستُخزن في الذاكرة المخبئية، ويعاد كتابتها عند استدعاء التابعين sync() و close(). يسهّل هذا الأمر عملية تعديل المدخلات القابلة للتعديل mutable في القاموس المستمر، ولكن في حال الوصول إلى عدد كبير من العناصر سيكون مقدار الذاكرة المستهلكة كبيرًا جدًّا الأمر الذي قد يؤدي إلى جعل عملية الإغلاق بطيئة للغاية وذلك لأنّ جميع العناصر التي تم الوصول إليها سيعاد كتابتها (لا توجد طريقة لتمييز العناصر القابلة للكتابة من بين العناصر التي يتم الوصول إليها، ولا توجد طريقة لتمييز العناصر المعدّلة أصلًا).
ملاحظة: لا تتوقع أن يُغلق الرفّ تلقائيًا بل استدعِ الدالة close() دائمًا عندما لا تحتاج إلى استخدام الرف أو استخدم الدالة shelve.open() كمدير للسياق: with shelve.open('spam') as db:
db['eggs'] = 'eggs'