Python’da dosyaları kapatmak ne kadar önemli?

Python’da tüm dosyaları kapatmak için Python çöp toplayıcısına güvenmek bir kodlama uygulaması olarak yeterli mi? Örneğin aşağıdakini yapmak ne kadar doğru? Dosya hiçbir zaman kapatılamadığı ve kapatılmasını engelleyen bir özel durum oluşabileceği için bu bir sorun oluşturur mu? Yoksa dosya kapsam dışına çıktığı için for döngüsü sonunda kesinlikle kapatılır mı? Bu örnekte dosyanın Python yorumlayıcısı… Jane Seymour A few hours ago · 5 min. read

-->

İlişkili olduğu konular : python-io

Python’da tüm dosyaları kapatmak için Python çöp toplayıcısına güvenmek bir kodlama uygulaması olarak yeterli mi? Örneğin aşağıdakini yapmak ne kadar doğru?

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

Dosya hiçbir zaman kapatılamadığı ve kapatılmasını engelleyen bir özel durum oluşabileceği için bu bir sorun oluşturur mu? Yoksa dosya kapsam dışına çıktığı için for döngüsü sonunda kesinlikle kapatılır mı?


Bu örnekte dosyanın Python yorumlayıcısı tarafından kapatılacağı garanti edilmez. CPython’un geçerli sürümlerinde dosya for döngüsünün sonunda kapatılır, çünkü CPython birincil çöp toplama mekanizması olarak referans sayımını kullanır. Ancak bu Python’un bir özelliği değil, CPython’un uygulamaya yönelik bir detayı diyebiliriz. Python’un diğer uygulamalarının bu şekilde çalışacağı da garanti edilmez. Örneğin IronPython, PyPy ve Jython referans sayımı kullanmaz ve bu nedenle döngünün sonunda dosyayı kapatmaz.

Yani..

Bazı Python uygulamaları referans verilmediğinde dosyaları otomatik olarak kapatırken, diğerleri kapatmaz. Bizim yerimize dosyaları kapatacak Python’lar için bile zamanlama garanti edilmez: hemen olabilir veya saniyeler, dakikalar, saatler, günler sonra olabilir.

CPython kullanıyorsanız kaynak sızıntılarınız olmayabilir, ancak referans sayımı kullanmayan bir Python uygulamasına geçerseniz, tüm kodunuzu gözden geçirmeniz ve tüm dosyalarınızın düzgün bir şekilde kapatıldığından emin olmanız gerekir. Aslında, Cpython 3’te artık sistemin sizin için dosyaları kapattığını belirten uyarılar alacaksınız.

Bu nedenle, kullandığınız Python ile ilgili sorunlar yaşamasanız da, dosyalarınızı açık bırakmak kesinlikle iyi bir uygulama değildir.

Bu nedenle aşağıdaki daha güvenlidir:

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

Peki with open() as f otomatik olarak dosyayı kapatır mı?

Evet. Bu yöntem with‘in sağladığı küçük bir sihir. Ama tabiki bunun çalışabilmesi için de gereksinimler var. Uyguladığımız nesnenin __enter__ ve __exit__ metodları olması gerekir. __exit__ metodunda dosyanın kapatılması ve benzeri temizlik işlemleri yapılır.

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Python’da bir listenin boş olduğunu nasıl anlarız?

Örneğin, aşağıdaki gibi bir listemiz olsa, bu listenin boş olup olmadığını nasıl kontrol ederiz? Kısa Cevap: Listeyi bir boole bağlamına yerleştirin (örneğin, bir if veya while deyimiyle), sonuç False ise boş, True ise doludur.

Python Koşul İfadeleri – if Kullanımı

Python’da koşul ifadeleri yazmaya if, elif veya else gibi anahtar kelimeleri kullanarak başlarız.

Python versiyon öğrenme

Kullanılan python sürümünü öğrenmek için veya komutlarını terminalde çalıştırabiliriz.

Python101 – Programlama Bilmeyenler için Python

Daha önce hiç programlama görmedim, Python öğrenebilir miyim? Bu eğitimde ilerledikçe programlamanın nasıl olduğunu Python üzerinden öğretmeye çalışacağız.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.