تقنية

detach في بايثون: هل تغلق مخزن الغلاف النصي؟

بعد detach: المخزن نفسه وغير مغلق.
المخزن المفتوح.

detach من TextIOWrapper تفصل المخزن الثنائي وتعيده؛ يصبح الغلاف النصي غير قابل للاستخدام. [1]

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

لا؛ مخزننا يبقى مفتوحًا هنا. [1]

  • detach من TextIOWrapper تفصل المخزن الثنائي وتعيده؛ يصبح الغلاف النصي غير قابل للاستخدام. [1]
  • على CPython 3.12.14، raw مخزن BytesIO يحوي b"bud"؛ نغلفه نصيًا بترميز utf-8. [1]
  • بعد الفصل، detached هو raw نفسه؛ الاختباران يطبعان True False: الكائن نفسه، وغير مغلق. [1]
  • text.write("leaf") ترفع ValueError؛ فشل الغلاف لا يعني إغلاق المخزن المنفصل. [1]
  • ننتقل لنهاية detached ونضيف b"leaf"، فنحصل على b"budleaf". تحكم بغلاف جديد: close تغلق مخزنه. التجربة في الذاكرة فقط. [1]

الغلاف والمخزن

detach من TextIOWrapper تفصل المخزن الثنائي وتعيده؛ يصبح الغلاف النصي غير قابل للاستخدام. [1]

كائن في الذاكرة

على CPython 3.12.14، raw مخزن BytesIO يحوي b"bud"؛ نغلفه نصيًا بترميز utf-8. [1]

حالة الغلاف

بعد الفصل، detached هو raw نفسه؛ الاختباران يطبعان True False: الكائن نفسه، وغير مغلق. [1]

import io raw=io.BytesIO(b"bud") text=io.TextIOWrapper(raw,encoding="utf-8") detached=text.detach() print(detached is raw,detached.closed) try: text.write("leaf") except ValueError: print("ValueError") [1]

بعد close في التحكم: المخزن مغلق.
المقارنة بالإغلاق.

المخزن والتحكم

text.write("leaf") ترفع ValueError؛ فشل الغلاف لا يعني إغلاق المخزن المنفصل. [1]

detached.seek(0,2) detached.write(b"leaf") print(detached.getvalue()) direct=io.BytesIO() control=io.TextIOWrapper(direct,encoding="utf-8") control.close() print(direct.closed) [1]

ننتقل لنهاية detached ونضيف b"leaf"، فنحصل على b"budleaf". تحكم بغلاف جديد: close تغلق مخزنه. التجربة في الذاكرة فقط. [1]

المراجع

  1. Python detach/close

للتوسع: لغات البرمجة.

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