0Pricing
Python Academy · Ders

with Deyimini Ayrıntılı İnceleme

with deyiminin nasıl çalıştığını ve kaynak sızıntılarını neden önlediğini öğrenin.

with Deyimini Ayrıntılı İnceleme, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Giriş

with ifadesi, özel durumlar oluşsa bile kurulum ve sonlandırma kodunun çalışmasını garanti eder.

Temel with Kullanımı

with expr as var: — expr, bir bağlam yöneticisi döndürmelidir. var, __enter__ tarafından döndürülen değere bağlanır.
with open('/tmp/cm_test.txt','w') as f:
    f.write('hello')
print('file closed:', f.closed)

with Neden Vardır?

Dosyalar, kilitler ve DB bağlantıları gibi kaynaklar serbest bırakılmalıdır. with, gövde bir özel durum nedeniyle kesintiye uğrasa bile temizlemeyi garanti eder.
# Without with:
# f = open('f.txt')
# try: ...
# finally: f.close()
# With with:
# with open('f.txt') as f: ...
print('with is cleaner')

Birden Çok Bağlam Yöneticisi

with open(a) as f, open(b) as g: tek bir ifadede iki kaynak açar. Çıkışta ikisi de kapatılır.
import tempfile, os
a = tempfile.mktemp(); b = tempfile.mktemp()
with open(a,'w') as fa, open(b,'w') as fb:
    fa.write('A'); fb.write('B')
os.unlink(a); os.unlink(b)
print('both closed')

with Özel Durumları Bastırmaz

Varsayılan olarak with gövdesindeki özel durumlar üst katmana iletilir. __exit__, True döndürerek bunları bastırabilir.
try:
    with open('/nonexistent.txt') as f:
        pass
except FileNotFoundError as e:
    print('caught:', e)

Bağlam Yöneticisi Olarak Lock

threading.Lock(), bağlam yöneticisi olarak çalışır: with lock:, kilidin her zaman serbest bırakılmasını sağlar.
import threading
lock = threading.Lock()
with lock:
    print('locked section')
print('lock released')

Veritabanı Bağlantısı Deseni

Bağlam yöneticisi olarak kullanılan bir DB bağlantısı, başarı durumunda commit yapar ve özel durum oluştuğunda rollback gerçekleştirir; bu kritik bir desendir.
# Typical DB pattern:
# with db.transaction() as conn:
#     conn.execute(sql)
# commits on success, rolls back on exception
print('db pattern demo')

İç İçe with İfadeleri

İç içe with ifadeleri kullanılabilir. İçteki bağlam yöneticisi önce çıkar, ardından dıştaki çıkar.
import tempfile
tmp = tempfile.mktemp()
with open(tmp,'w') as outer:
    with open(tmp,'r+') as inner:
        outer.write('x')
import os; os.unlink(tmp)
print('nested exit order')

contextlib.suppress

contextlib.suppress(ExcType), with bloğu içindeki belirli bir özel durum türünü sessizce yok sayar.
from contextlib import suppress
with suppress(FileNotFoundError):
    open('/does/not/exist.txt')
print('no error raised')

contextlib.redirect_stdout

contextlib.redirect_stdout(f), print() çıktısını geçici olarak f'ye yönlendirir.
from contextlib import redirect_stdout
import io
buf = io.StringIO()
with redirect_stdout(buf):
    print('captured')
print('got:', buf.getvalue())

ExitStack

contextlib.ExitStack, dinamik sayıdaki bağlam yöneticisini yönetir; kaç dosya açmanız gerektiğini bilmediğiniz durumlarda kullanışlıdır.
from contextlib import ExitStack
import tempfile, os
with ExitStack() as stack:
    files = [stack.enter_context(open(tempfile.mktemp(),'w')) for _ in range(3)]
    for f in files: f.write('x')
print('all closed')

Hızlı Yoklama

contextlib.suppress(FileNotFoundError) ne yapar?

Özet

with temizlemeyi garanti eder. Tek bir with içinde birden çok hedef kullanılabilir. contextlib.suppress, belirli hataları susturur. ExitStack, dinamik sayıdaki bağlam yöneticisini yönetir.

Devam Edin

Harika iş çıkardınız! Sıradaki ders sizi bekliyor.

Sıkça Sorulan Sorular

“with Deyimini Ayrıntılı İnceleme” dersi ücretsiz mi?

Evet — “with Deyimini Ayrıntılı İnceleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“with Deyimini Ayrıntılı İnceleme” dersinde ne öğreneceğim?

with deyiminin nasıl çalıştığını ve kaynak sızıntılarını neden önlediğini öğrenin. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“with Deyimini Ayrıntılı İnceleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. with Deyimini Ayrıntılı İnceleme
  2. __enter__ ve __exit__ Protokolü
  3. contextlib: @contextmanager
  4. Pratik Bağlam Yöneticisi Kalıpları
← Python Academy Sayfasına Dön