with إدارة السياق
آخر تحديث: 2026-09-22
with إدارة السياق
عبارة with تستدعي __enter__ / __exit__ لمدير السياق عند الدخول إلى كتلة الشيفرة والخروج منها؛ تُستخدم غالبًا للملفات/الأقفال/الاتصالات.
| التصنيف | الكلمات المفتاحية والعبارات |
|---|---|
| النوع | كلمة مفتاحية / عبارة |
| إصدار بايثون | all |
📝 الصياغة
with expr [as target]:
block
▶ مثال
عدّل الكود واضغط تشغيل لرؤية النتيجة في لوحة المخرجات:
المخرجات:
closed: True
💡 تلميح with أوضح من try/finally، وهي الطريقة الموصى بها رسميًا لإدارة الموارد.
💡 حالات ذات صلة
المزيد من الحالات قادم قريباً — تابعونا.
❓ أسئلة شائعة
Qبعد فتح ملف بـ `with`، هل ما زلت بحاجة إلى إغلاقه يدويًا؟
Aلا. يستدعي `with` تلقائيًا `close()` الخاص بالملف (عبر `__exit__`) عند مغادرة الكتلة، حتى لو أُثير استثناء في منتصف الطريق. هذه هي الطريقة الموصى بها رسميًا لإدارة الموارد.
Qهل يمكن لـ `with` إدارة عدة موارد مرة واحدة؟
Aنعم. تتيح بايثون 3.10+ كتابة `with (open(a) as f1, open(b) as f2):`. على الإصدارات الأقدم استخدم `with` المتداخلة، أو أدر الموارد ديناميكيًا عبر `contextlib.ExitStack`.
Qهل يبقى متغير `as` بعد `with` قابلًا للاستخدام خارج الكتلة؟
Aالاسم المتغير ما زال متاحًا (بايثون بلا نطاق على مستوى الكتلة)، لكن المورد أُغلق بالفعل. على سبيل المثال، قراءة أو كتابة ملف خارج `with` يُحدث `ValueError: I/O operation on closed file`.