تسهيل البرمجة عبر الكائنات المديرة للسياق وعبارة المعية with

تقوم سياسة بايثون على أن البرنامج يجب أن يكون مفهوم وسهل القراءة وسنناقش في هذه المقالة أحد جوانب الكود السهل.


لابد أنك لاحظت أن في كثير من الأحيان تكون الدالة أو أي جزء من الكود يكون على شكل كود استهلال معين ثم عملية ما ثم كود تنظيف قبل الخروج أو العودة


عندما يبدأ الكود بالتعقيد فيصبح هناك أكثر من مكان للخروج أو يصبح هناك معالجة للاستثناءات/الأخطاء من خلال عبارات التجربة try كل منها تحتاج لنفس كود التنظيف قبل الخروج.


بالمثال يمكننا أن نوضح هذه الفكرة فلنتخيل أن لدينا كود يفتح ملف ثم يحصل على قفل عليه ثم يقرأ شيء منه (الإزاحة مثلا) ثم يتحرك في الملف ليكتب شيء فيه ويعالج الإستثناءات مثل الخطأ في القراءة أو الخطأ في الكتابة ثم يحسب شيء ما ثم يعالج حالة القسمة على صفر ثم يعيد الناتج وفي كل حالة خروج يجب أن يحرر القفل ويغلق الملف تخيل في كم مكان سيتكرر ذلك.


لاحظ مصمموا بايثون ذلك واقترحوا الحل وقد أضيف في الإصدار 2.5 وهو الكائنات المديرة للسياق وعبارة المعية with وذلك في الوثيقة pep-0343


http://ift.tt/1h4G8nx


الكائن المدير للسياق هو كائن ينفذ الدالتين الخاصتين __enter__ و __exit__ عند الدخول والخروج من السياق على الترتيب. ومن الأمثلة على كائنات السياق




  • كائن الملف




  • كائنات القفل المختلفة (الأقفال والشروط والحواجز)




مثال على ذلك:



import hashlib
def md5sum(filename):
f=open(filename, 'r')
with f:
content=f.read()
md5sum=hashlib.md5(content).hexdigest()
return md5sum


أو بطريقة أبسط عبر استعمال as



import hashlib
def md5sum(filename):
with open(filename, 'r') as f:
return md5sum=hashlib.md5(f.read()).hexdigest()


سيتم إغلاق الملف close تلقائيا قبل العودة أو عند حدوث خطأ لأن مدير السياق الموجود في كائن الملف سينفذ ذلك.


مثال آخر



from threading import Lock
my_lock=Lock()
with lock:
do_something()


مدير السياق في كائن القفل يعمل حجز acquire قبل الدخول ويتحرره release عند الخروج بأي طريقة (بما فيها حدوث خطأ استثنائي).






http://ift.tt/1gQzHVK



from Arabia I/O - الأكثر شيوعاً http://ift.tt/1h4G6w3

Commentaires