ما هي ميزة استخدام "مع .. كـ" في بيثون؟
-
02-10-2019 - |
سؤال
with open("hello.txt", "wb") as f: f.write("Hello Python!\n")
يبدو أنه هو نفسه
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
ما هي ميزة استخدام Open .. بدلاً من F =؟ هل هو مجرد السكر النحوي؟ مجرد حفظ سطر واحد من التعليمات البرمجية؟
المحلول
من أجل أن تكون مكافئة ل with
إصدار البيان ، يجب أن يبدو الرمز الذي كتبته مثل هذا:
f = open("hello.txt", "wb")
try:
f.write("Hello Python!\n")
finally:
f.close()
على الرغم من أن هذا قد يبدو مثل السكر النحوي ، إلا أنه يضمن إطلاق الموارد. بشكل عام ، يكون العالم أكثر تعقيدًا من هذه الأمثلة المفتعلة وإذا نسيت أ try.. except...
أو تفشل في التعامل مع حالة متطرفة ، لديك تسرب الموارد على يديك.
ال with
البيان يوفر لك من تلك التسريبات ، مما يسهل كتابة التعليمات البرمجية النظيفة. للحصول على شرح كامل ، انظر إلى بيب 343, ، لديها الكثير من الأمثلة.
نصائح أخرى
إذا f.write
يلقي استثناء ، f.close()
يتم استدعاؤه عند استخدامه with
ولا تسمى في الحالة الثانية. ايضا f
يحتوي على نطاق أصغر والرمز أكثر نظافة عند استخدامه with.
السابق لا يزال يغلق f
إذا حدث استثناء أثناء f.write()
.