with
إدارة الموارد — جملة with with
with تضمن تنظيف المورد (إغلاق ملف، قفل، اتصال) تلقائيًا بعد الانتهاء من الكتلة، حتى لو حدث خطأ بداخلها.
تُبسّط نمط try/finally المتكرر: أي كائن يدعم "بروتوكول مدير السياق" (context manager) يمكن استخدامه بعد with، وبايثون تضمن استدعاء إجراء التنظيف الخاص به تلقائيًا عند الخروج من الكتلة — سواء انتهت بنجاح أو بخطأ.
أشهر استخدام لها هو مع open() لضمان إغلاق الملفات، لكن نفس الفكرة تنطبق على أقفال الخيوط (locks) واتصالات قواعد البيانات وغيرها.
الصياغة
with تعبير as متغيّر:
كتلة الكود📄 مثال
with open("data.txt", encoding="utf-8") as f:
content = f.read()
# الملف مُغلَق تلقائيًا هنا، حتى لو حدث خطأ أثناء القراءة
# يعادل تقريبًا:
f = open("data.txt", encoding="utf-8")
try:
content = f.read()
finally:
f.close()أهم المعاملات
| المعامل | الوظيفة |
|---|---|
| تعبير | كائن يدعم بروتوكول مدير السياق (مثل ملف مفتوح بـ open()) |
| as متغيّر | اسم اختياري يُخزَّن فيه الكائن الناتج من فتح المورد |
💡 نصائح عملية
- استخدم with مع أي مورد يحتاج إغلاقًا أو تحريرًا (ملفات، اتصالات) بدل try/finally يدوي
- يمكن فتح أكثر من مورد بنفس جملة with بفصلها بفاصلة: with open(a) as f1, open(b) as f2:
⚠️ أخطاء شائعة
- فتح ملف بـ open() مباشرة دون with ونسيان إغلاقه يدويًا بـ close()
- الظن أن with تمنع حدوث الاستثناء نفسه — هي فقط تضمن تنظيف المورد، الاستثناء يستمر بالانتشار ما لم يُعالَج
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار PYTHON الكامل بالعربي.