الفرق بين المراجعتين لصفحة: «Python/shelve/open»
لا ملخص تعديل |
|||
سطر 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> === |
المراجعة الحالية بتاريخ 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'