سؤال

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().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top