تقنية

mmap في بايثون: هل إسناد الشريحة يحرك المؤشر؟

إسناد الشريحة يبقي الموضع واحدًا
مثال مؤلف. [1] [2]

نغير بايتين في مساحة مؤلفة. [1] [2]

الخلاصة السريعة

لا؛ إسناد الشريحة يغير محتواها، ويترك الموضع الحالي كما هو. [1] [2]

  • يطبع مثالنا 1 وb'aXYd'. [1] [2]
  • حددنا الموضع 1 قبل الإسناد. [1] [2]
  • الشريحة 1:3 تستبدل بايتين؛ طول البديل يطابق طولها. [1] [2]
  • استبدال الإسناد بـm.write(b"XY") يعطي الموضع 3 والمحتوى نفسه. [1] [2]
  • اختبرنا 3.12.14 على Windows بمساحة مجهولة؛ يغلقها with. [1] [2]

المثال

import mmap
with mmap.mmap(-1,4) as m:
 m[:]=b"abcd"
 m.seek(1)
 m[1:3]=b"XY"
 print(m.tell(),m[:])

[1] [2]

المحتوى والموضع

الإسناد يحدد المكان بحدود الشريحة، لا بالمؤشر. أما write فتبدأ عند الموضع الحالي وتحركه بعد البايتات المكتوبة. لذلك لا يكفي تطابق المحتوى لإثبات تطابق الموضع؛ افحص tell. [1] [2]

write تحرك الموضع إلى ثلاثة
المحتوى نفسه، موضع مختلف. [1] [2]

الحدود

القيمة -1 تنشئ مساحة مجهولة، لا ملفًا مسمى. لم نختبر حفظ ملف أو مشاركته أو سرعته؛ ولا نعمم اختبار Windows على كل منصة. [1] [2]

المراجع

  1. Python: mmap والكتابة
  2. CPython3.12.14: mmapmodule.c
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.