SORU
13 EYLÜL 2011, Salı


Açıkça kapanış dosyalar önemli mi?

Python, ya da açık bir dosya olmadan arama close() ya da dosyayı kapatın ama kullanmıyor try-finally veya "with" deyimi, bu bir sorun mu? Veya Python çöp toplama tüm dosyaları kapatmak için kullanan bir kodlama yöntemi olarak yeterli mi? Örneğin, eğer birisi bunu yapar:

for line in open("filename"):
    # ... do stuff ...

... dosya asla kapatılamaz, çünkü bir sorun olduğunu ve bu bir istisna kapalı engeller oluşabilir ki? Yoksa kesinlikle dosya kapsam dışında gider for açıklamasının sonunda kapatılacak?

CEVAP
13 EYLÜL 2011, Salı


Örnek dosyayı yorumlayıcı çıkar önce kapalı olduğu garanti değil. Geçerli sürümleri CPython dosya kapanacak sonu için döngü çünkü CPython kullanır referans sayma gibi onun birincil çöp toplama mekanizması ama o bir uygulama ayrıntı değil, bir özellik dilidir. Python diğer uygulamaları bu şekilde çalışmak için garantili değil. Örneğin IronPython, PyPy ve Jython başvuru sayma kullanmayın ve bu nedenle döngü sonunda dosya kapanmıyor.

Kodunuzun daha taşınabilir hale getirir, çünkü CPython çöp toplama uygulaması güvenmek kötü bir uygulamadır. Olabilirsiniz kaynak sızıntıları kullanırsanız CPython, ama eğer geçiş yapmak için bir Python uygulaması olan kullanmaz başvuru saymak gerekir geçmek tüm kod ve emin olun tüm dosyaları düzgün kapalı.

Senin örneğin kullanın:

with open("filename") as f:
     for line in f:
        # ... do stuff ...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013