تقنية

finalize.detach في بايثون: هل تنفذ دالة التنظيف؟

الفصل والسجل الفارغ
الإلغاء. [1] [2]

إلغاء المنهي يختلف عن تشغيل دالته. [1] [2]

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

detach يلغي المنهي الحي ويعيد بياناته دون تشغيل دالة التنظيف. [1] [2]

  • سجلنا cleanup مع الوسيط bud. [1] [2]
  • بعد الفصل يظهر False []؛ الدالة لم تعمل. [1] [2]
  • saved[2] هو صف الوسائط ('bud',). [1] [2]
  • الاستدعاء اللاحق f() يعيد None والسجل فارغ. [1] [2]
  • اختبرنا 3.12.14 وكائننا باقٍ. [1] [2]

المثال

import weakref
class C: pass
obj=C(); calls=[]
def cleanup(tag):
    calls.append(tag)
f=weakref.finalize(
    obj,cleanup,'bud')
saved=f.detach()
print(f.alive,calls)
print(saved[2])
print(f(),calls)

[1] [2]

البيانات المعادة

المصدر هنا يعيد صفًا: الكائن، والدالة، وصف الوسائط، وقاموس الوسائط المسماة. أخذ البيانات لا يستدعي الدالة. يمكن استدعاؤها يدويًا من البيانات؛ سيكون ذلك استدعاءً مباشرًا، لا تشغيلًا للمنهي الملغى. [1] [2]

صف الوسائط المحفوظة
البيانات. [1] [2]

النطاق

سجلنا الوسيط في قائمة مؤلفة فقط؛ لا ننظف ملفًا أو موردًا. لا نختبر جمع القمامة أو إغلاق المفسر. الفصل مرة أخرى يعيد None أيضًا. [1] [2]

المراجع

  1. Python 3.12: finalize.detach
  2. CPython 3.12.14: weakref.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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