تقنية

ExitStack في بايثون: pop_all ينقل التنظيف دون تشغيله

pop_all وإغلاق القديم: سجل فارغ؛ إغلاق الجديد: w ثم u ثم r.
بعد النقل.

pop_all ينقل دوال التنظيف المسجلة إلى ExitStack جديد دون تشغيلها. [1]

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

نقل الدوال يؤجل تشغيلها حتى إغلاق المكدس الجديد. [1]

  • pop_all ينقل دوال التنظيف المسجلة إلى ExitStack جديد دون تشغيلها. [1]
  • close يشغّل الدوال بعكس ترتيب تسجيلها. [1]
  • مثال مؤلف شُغّل على CPython 3.12.14 مع from contextlib import ExitStack؛ events=[] وstack=ExitStack()؛ نسجل stack.callback(events.append,x) للرموز r وu وw بالترتيب. [1]
  • بعد new=stack.pop_all() ثم stack.close()، تبقى events فارغة. [1]
  • new.close() يجعل events تساوي ["w","u","r"]؛ سجلنا رموزًا فقط، دون تنظيف موارد فعلية. [1]

نقل الدوال

pop_all ينقل دوال التنظيف المسجلة إلى ExitStack جديد دون تشغيلها. [1]

ترتيب التشغيل

close يشغّل الدوال بعكس ترتيب تسجيلها. [1]

تسجيل المثال

مثال مؤلف شُغّل على CPython 3.12.14 مع from contextlib import ExitStack؛ events=[] وstack=ExitStack()؛ نسجل stack.callback(events.append,x) للرموز r وu وw بالترتيب. [1]

new=stack.pop_all(); stack.close() -> events=[] [1]

التسجيل r ثم u ثم w؛ التشغيل w ثم u ثم r.
عكس التسجيل.

إغلاق الجديد

بعد new=stack.pop_all() ثم stack.close()، تبقى events فارغة. [1]

new.close() -> events=["w","u","r"] [1]

new.close() يجعل events تساوي ["w","u","r"]؛ سجلنا رموزًا فقط، دون تنظيف موارد فعلية. [1]

المراجع

  1. Python — ExitStack

للتوسع: تكديس النماذج.

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