الكائن الناتج من contextmanager للاستعمال مرة؛ تزيين الدالة ينشئ مولدًا جديدًا لكل استدعاء. [1] [2]
الخلاصة السريعة
لا؛ نميز الكائن عن التزيين. [1] [2]
- الكائن الناتج من contextmanager للاستعمال مرة؛ تزيين الدالة ينشئ مولدًا جديدًا لكل استدعاء. [1] [2]
- في CPython 3.12.14، دالة managed تستخدم yield واحدة "bud" وتسجل "enter" ثم "exit"؛ own_events=[] وown=managed(own_events). [1] [2]
- بعد with الأولى وخروجها العادي، with ثانية على own ترفع AttributeError قبل الكتلة؛ السجل يبقى ["enter","exit"]. [1] [2]
- __enter__ المثبتة تحذف سمات الإنشاء؛ التزيين يعيد إنشاء المدير بدل إعادة دخول الكائن المستعمل. [1] [2]
- تحكم: control_events=[]؛ @managed(control_events) تزين run التي تعيد "leaf"؛ استدعاؤها مرتين يسجل ["enter","exit","enter","exit"]. نوع الخطأ مقيد بالإصدار، والتجربة متزامنة دون تداخل. [1] [2]
إعادة الاستعمال
الكائن الناتج من contextmanager للاستعمال مرة؛ تزيين الدالة ينشئ مولدًا جديدًا لكل استدعاء. [1] [2]
المدير
في CPython 3.12.14، دالة managed تستخدم yield واحدة "bud" وتسجل "enter" ثم "exit"؛ own_events=[] وown=managed(own_events). [1] [2]
الدخول الثاني
بعد with الأولى وخروجها العادي، with ثانية على own ترفع AttributeError قبل الكتلة؛ السجل يبقى ["enter","exit"]. [1] [2]
from contextlib import contextmanager @contextmanager def managed(events): events.append("enter") try:yield "bud" finally:events.append("exit") own_events=[];own=managed(own_events) with own as value:print(value) try: with own:pass except AttributeError:print("AttributeError") print(own_events) [1] [2]
![@managed(control_events); run():"leaf"; run():"leaf"; control_events:["enter","exit","enter","exit"]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1743/python-contextmanager-reuse-values.png)
التزيين
__enter__ المثبتة تحذف سمات الإنشاء؛ التزيين يعيد إنشاء المدير بدل إعادة دخول الكائن المستعمل. [1] [2]
control_events=[] @managed(control_events) def run():return "leaf" print(run(),run()) print(control_events) [1] [2]
تحكم: control_events=[]؛ @managed(control_events) تزين run التي تعيد "leaf"؛ استدعاؤها مرتين يسجل ["enter","exit","enter","exit"]. نوع الخطأ مقيد بالإصدار، والتجربة متزامنة دون تداخل. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
![contextmanager; own=managed(own_events); first:"bud"; second:AttributeError; own_events:["enter","exit"]](https://images.bahralolom.com/assets/local-2000-20261012/BA-1743/python-contextmanager-reuse-main.png)