0Pricing
Python Academy · Ders

Pratik Bağlam Yöneticisi Kalıpları

Bağlam yöneticilerini dosyalara, kilitlere, zamanlayıcılara ve DB bağlantılarına uygulayın.

Pratik Bağlam Yöneticisi Kalıpları, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. 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ş

Bağlam yöneticileri; dosyalar, veritabanları, kilitler, zamanlayıcılar ve daha fazlasındaki gerçek dünya kaynak yönetimi sorunlarını zarif bir şekilde çözer.

Dosya İşleme Hattı

Girdi ve çıktı dosyalarını birlikte açın, satır satır işleyin ve ikisini de otomatik olarak kapatın.
import io
src = io.StringIO('line1\nline2\nline3')
dst = io.StringIO()
with src, dst:
    for line in src:
        dst.write(line.upper())
print(dst.getvalue())

Veritabanı İşlemi

Veritabanı işlemlerini bir CM ile sarın: başarı durumunda işlemi onaylayın, istisna durumunda geri alın ve her durumda kapatın.
from contextlib import contextmanager
@contextmanager
def db_transaction(conn):
    try:
        yield conn
        print('COMMIT')
    except Exception as e:
        print(f'ROLLBACK: {e}')
        raise
    finally:
        print('CLOSE')
with db_transaction({'execute': lambda q: print(f'SQL: {q}')}) as db:
    db['execute']('INSERT ...')

İş Parçacığı Kilidi

with lock: kilidi alır, gövdeyi çalıştırır ve çıkışta kilidi bırakır — elle alma/bırakma işlemi gerekmez.
import threading
lock = threading.Lock()
shared = []
def add(x):
    with lock:
        shared.append(x)
add(1); add(2)
print(shared)

Dizin Değiştirme

os.chdir(), çalışma dizinini genel olarak değiştirir. Bir CM, dizini kaydedip geri yükler.
from contextlib import contextmanager
import os
@contextmanager
def chdir(path):
    old = os.getcwd()
    os.chdir(path)
    try: yield
    finally: os.chdir(old)
original = os.getcwd()
with chdir('/tmp'):
    print('in tmp:', os.getcwd())
print('back:', os.getcwd())

Geçici Dosyalar

tempfile.NamedTemporaryFile, bir CM olarak geçici bir dosya oluşturur ve bu dosyayı otomatik olarak siler.
import tempfile
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=True) as f:
    f.write('temp data')
    print('temp file:', f.name)
print('deleted')

Ortam Değişkeni Değişikliği

Bir sınama veya alt süreç için bir env değişkenini geçici olarak ayarlayın, ardından eski değerini geri yükleyin.
from contextlib import contextmanager
import os
@contextmanager
def env(**kwargs):
    old = {k: os.environ.get(k) for k in kwargs}
    os.environ.update({k:str(v) for k,v in kwargs.items()})
    try: yield
    finally:
        for k,v in old.items():
            if v is None: os.environ.pop(k,None)
            else: os.environ[k]=v
with env(DEBUG='1', LOG_LEVEL='DEBUG'):
    print(os.environ['DEBUG'])

Profil Oluşturma Bloğu

Bir bloğu cProfile ile sararak CM içinde performansını ölçün.
from contextlib import contextmanager
import cProfile
@contextmanager
def profile():
    pr = cProfile.Profile()
    pr.enable()
    yield pr
    pr.disable()
with profile() as pr:
    sum(range(1000000))
print('profiled')

Ağ Soketi

Soketler CM protokolünü uygular: with socket.socket() as s: çıkışta soketi kapatır.
import socket
try:
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.settimeout(0.1)
        print('socket ready')
except Exception as e:
    print(f'socket: {e}')

Uyarıları Yakalama

warnings.catch_warnings(), blok içinde oluşturulan uyarıları yakalar; sınamalarda kullanışlıdır.
import warnings
with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter('always')
    warnings.warn('test warning')
print(len(w), w[0].category.__name__)

Örüntüleri Birleştirme

Gerçek dünya CM'leri genellikle birden fazla örüntüyü birleştirir: tek bir yeniden kullanılabilir bileşende işlem + günlükleme + zaman ölçümü.
from contextlib import contextmanager
import time
@contextmanager
def timed_operation(name):
    print(f'[{name}] start')
    t0 = time.perf_counter()
    try:
        yield
        print(f'[{name}] done in {time.perf_counter()-t0:.4f}s')
    except Exception as e:
        print(f'[{name}] failed: {e}')
        raise
with timed_operation('loop'):
    sum(range(100000))

Kısa Kontrol

Güvenli eşzamanlı erişim için bağlam yöneticisi protokolünü hangi iş parçacığı ilkeli uygular?

Özet

Bağlam yöneticisi örüntüleri: dosya işlem hatları, veritabanı işlemleri, kilitler, dizin değişiklikleri, geçici dosyalar, ortam değişiklikleri ve profil oluşturma. Dinamik kaynak yığınları için ExitStack.

Devam Edin

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

Sıkça Sorulan Sorular

“Pratik Bağlam Yöneticisi Kalıpları” dersi ücretsiz mi?

Evet — “Pratik Bağlam Yöneticisi Kalıpları” 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.

“Pratik Bağlam Yöneticisi Kalıpları” dersinde ne öğreneceğim?

Bağlam yöneticilerini dosyalara, kilitlere, zamanlayıcılara ve DB bağlantılarına uygulayın. 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 4. dersidir.

“Pratik Bağlam Yöneticisi Kalıpları” 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