0Pricing
Python Academy · Pelajaran

Pernyataan with secara Mendalam

Pahami cara kerja with dan alasan pernyataan ini mencegah kebocoran sumber daya.

Pernyataan with secara Mendalam adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 1 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

Pernyataan with menjamin kode penyiapan dan pembongkaran tetap dijalankan, bahkan ketika terjadi pengecualian.

Penggunaan Dasar with

with expr as var:—expr harus mengembalikan pengelola konteks. var terikat pada apa pun yang dikembalikan oleh __enter__.
with open('/tmp/cm_test.txt','w') as f:
    f.write('hello')
print('file closed:', f.closed)

Mengapa with Ada

Sumber daya seperti berkas, kunci, dan koneksi basis data harus dilepaskan. with menjamin pembersihan tetap dilakukan meskipun pengecualian menghentikan isi blok.
# Without with:
# f = open('f.txt')
# try: ...
# finally: f.close()
# With with:
# with open('f.txt') as f: ...
print('with is cleaner')

Beberapa Pengelola Konteks

with open(a) as f, open(b) as g: membuka dua sumber daya dalam satu pernyataan. Keduanya ditutup saat keluar.
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 Tidak Menyembunyikan Pengecualian

Secara bawaan, pengecualian dalam isi with diteruskan. __exit__ dapat menyembunyikannya dengan mengembalikan True.
try:
    with open('/nonexistent.txt') as f:
        pass
except FileNotFoundError as e:
    print('caught:', e)

Lock sebagai Pengelola Konteks

threading.Lock() berfungsi sebagai pengelola konteks: with lock: memastikan kunci selalu dilepaskan.
import threading
lock = threading.Lock()
with lock:
    print('locked section')
print('lock released')

Pola Koneksi Basis Data

Koneksi DB sebagai pengelola konteks melakukan commit saat berhasil dan rollback saat terjadi pengecualian—pola yang sangat penting.
# Typical DB pattern:
# with db.transaction() as conn:
#     conn.execute(sql)
# commits on success, rolls back on exception
print('db pattern demo')

Pernyataan with Bertingkat

Pernyataan with bertingkat tidak bermasalah. Pengelola konteks bagian dalam keluar lebih dahulu, kemudian pengelola bagian luar.
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) secara diam-diam mengabaikan tipe pengecualian tertentu di dalam blok with.
from contextlib import suppress
with suppress(FileNotFoundError):
    open('/does/not/exist.txt')
print('no error raised')

contextlib.redirect_stdout

contextlib.redirect_stdout(f) untuk sementara mengalihkan keluaran print() ke f.
from contextlib import redirect_stdout
import io
buf = io.StringIO()
with redirect_stdout(buf):
    print('captured')
print('got:', buf.getvalue())

ExitStack

contextlib.ExitStack mengelola jumlah pengelola konteks yang dinamis—berguna saat Anda belum mengetahui jumlah berkas yang harus dibuka.
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')

Pemeriksaan Singkat

Apa yang dilakukan contextlib.suppress(FileNotFoundError)?

Ringkasan

with menjamin pembersihan. Beberapa target dapat digunakan dalam satu with. contextlib.suppress membungkam kesalahan tertentu. ExitStack mengelola jumlah pengelola konteks yang dinamis.

Lanjutkan

Kerja bagus! Pelajaran berikutnya sudah menanti.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pernyataan with secara Mendalam” gratis?

Ya — teks lengkap “Pernyataan with secara Mendalam” 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 “Pernyataan with secara Mendalam”?

Pahami cara kerja with dan alasan pernyataan ini mencegah kebocoran sumber daya. 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 1 dari 4.

Berapa lama pelajaran “Pernyataan with secara Mendalam” 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