0Pricing
Python Academy · Pelajaran

Pola Pengelola Konteks Praktis

Terapkan pengelola konteks pada file, kunci, pewaktu, dan koneksi DB.

Pola Pengelola Konteks Praktis adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Pendahuluan

Pengelola konteks menyelesaikan masalah nyata dalam pengelolaan sumber daya secara elegan, baik untuk berkas, basis data, kunci, pengukur waktu, maupun lainnya.

Alur Pemrosesan Berkas

Buka berkas masukan dan keluaran secara bersamaan, proses baris demi baris, lalu tutup keduanya secara otomatis.
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())

Transaksi Basis Data

Bungkus operasi basis data dalam CM: lakukan commit jika berhasil, lakukan rollback jika terjadi pengecualian, dan selalu tutup.
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 ...')

Kunci Thread

with lock: memperoleh kunci, menjalankan isi blok, lalu melepaskannya saat keluar — tidak perlu melakukan acquire/release secara manual.
import threading
lock = threading.Lock()
shared = []
def add(x):
    with lock:
        shared.append(x)
add(1); add(2)
print(shared)

Mengubah Direktori

os.chdir() mengubah direktori kerja secara global. CM menyimpan lalu memulihkannya.
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())

Berkas Sementara

tempfile.NamedTemporaryFile sebagai CM membuat dan menghapus berkas sementara secara otomatis.
import tempfile
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=True) as f:
    f.write('temp data')
    print('temp file:', f.name)
print('deleted')

Penyesuaian Variabel Lingkungan

Atur variabel lingkungan untuk sementara bagi sebuah test atau proses turunan, lalu pulihkan nilainya.
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'])

Blok Pembuatan Profil

Bungkus sebuah blok dengan cProfile untuk mengukur kinerjanya di dalam CM.
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')

Soket Jaringan

Soket menerapkan protokol CM: with socket.socket() as s: soket ditutup saat keluar.
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}')

Menangkap Peringatan

warnings.catch_warnings() menangkap peringatan yang dihasilkan di dalam blok, sehingga berguna dalam tests.
import warnings
with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter('always')
    warnings.warn('test warning')
print(len(w), w[0].category.__name__)

Menggabungkan Pola

CM di dunia nyata sering menggabungkan beberapa pola: transaksi + logging + pengukuran waktu dalam satu komponen yang dapat digunakan kembali.
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))

Pemeriksaan Singkat

Primitif threading apa yang menerapkan protokol pengelola konteks untuk akses bersamaan yang aman?

Ringkasan

Pola pengelola konteks: alur berkas, transaksi basis data, kunci, perubahan direktori, berkas sementara, penyesuaian variabel lingkungan, dan pembuatan profil. Gunakan ExitStack untuk tumpukan sumber daya dinamis.

Lanjutkan

Kerja bagus! Pelajaran berikutnya sudah menanti.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Pengelola Konteks Praktis” gratis?

Ya — teks lengkap “Pola Pengelola Konteks Praktis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Pengelola Konteks Praktis”?

Terapkan pengelola konteks pada file, kunci, pewaktu, dan koneksi DB. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Pola Pengelola Konteks Praktis” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pernyataan with secara Mendalam
  2. Protokol __enter__ dan __exit__
  3. contextlib: @contextmanager
  4. Pola Pengelola Konteks Praktis
← Kembali ke Python Academy