Gambar oleh johnstocker aktif Freepik
Beberapa waktu yang lalu, saya menulis tutorial tentang menulis kode Python yang efisien. Di dalamnya, saya berbicara tentang penggunaan manajer konteks dan pernyataan with untuk mengelola sumber daya secara efisien.
Saya menggunakan contoh penanganan file sederhana untuk menunjukkan bagaimana file ditutup secara otomatis ketika eksekusi keluar dari blok with—bahkan jika ada pengecualian.
Meskipun penanganan file adalah contoh pertama yang baik, hal ini dapat dengan cepat menjadi membosankan. Itulah sebabnya saya ingin membahas kegunaan menarik lainnya dari pengelola konteks—selain penanganan file—dalam tutorial ini. Kami akan fokus pada penanganan koneksi database, pengelolaan subproses, dan aritmatika floating point presisi tinggi.
Manajer konteks dengan Python memungkinkan Anda menulis kode yang lebih bersih saat bekerja dengan sumber daya. Mereka menyediakan sintaksis ringkas untuk menyiapkan dan menghancurkan sumber daya melalui:
- An Enter logika yang dipanggil ketika eksekusi memasuki konteks dan
- An keluar logikanya dipanggil ketika eksekusi keluar dari konteks
Contoh paling sederhana dari hal ini adalah dalam penanganan file. Di sini kita menggunakan open()
fungsi di with
pernyataan untuk mendapatkan penangan file:
with open('filename.txt', 'w') as file:
file.write('Something random')
Ini memperoleh sumber daya—objek file—yang digunakan (kita menulis ke file) dalam blok kode. File ditutup setelah eksekusi keluar dari konteksnya; jadi tidak ada kebocoran sumber daya.
Anda dapat menulis versi generiknya seperti ini:
with some_context() as ctx:
# do something useful on the resource!
# resource cleanup is automatic
Sekarang mari kita lanjutkan ke contoh spesifiknya.
Saat Anda membuat aplikasi Python, sangat umum untuk terhubung ke database dan menanyakan tabel yang ada di dalamnya. Dan alur kerja untuk melakukan ini akan terlihat seperti ini:
- Instal konektor database untuk bekerja dengan database (seperti psycopg2 untuk Postgres dan mysql-connector-python untuk database MySQL).
- Parsing file konfigurasi untuk mengambil parameter koneksi.
- Gunakan
connect()
berfungsi untuk membuat koneksi ke database.
Menghubungkan ke db | Gambar oleh Penulis
Setelah Anda terhubung ke database, Anda bisa membuat database untuk menanyakan database. Jalankan kueri dan ambil hasil kueri menggunakan metode jalankan dan ambil kursor.
Menanyakan db | Gambar oleh Penulis
Dengan melakukannya, Anda membuat sumber daya berikut: koneksi database dan kursor database. Sekarang mari kita membuat kode contoh umum sederhana untuk melihat bagaimana kita dapat menggunakan koneksi dan objek kursor sebagai pengelola konteks.
Mengurai File TOML dengan Python
Pertimbangkan contoh file TOML, misalnya db_config.toml, yang berisi informasi yang diperlukan untuk menyambung ke database:
# db_config.toml
[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"
Note: Anda memerlukan Python 3.11 atau versi yang lebih baru untuk digunakan tomllib.
Python memiliki bawaan tomllib modul (diperkenalkan dengan Python 3.11) yang memungkinkan Anda mengurai file TOML. Jadi Anda bisa membuka file db_config.toml dan mengurai isinya seperti:
import tomllib
with open('db_config.toml','rb') as file:
credentials = tomllib.load(file)['database']
Perhatikan bahwa kita memanfaatkan bagian 'database' dari file db_config.toml. Itu load()
fungsi mengembalikan kamus Python. Anda dapat memverifikasi ini dengan mencetak isinya credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
Menghubungkan ke Database
Katakanlah Anda ingin terhubung ke database Postgres. Anda dapat menginstal konektor psycopg2 menggunakan pip:
pip install psycopg2
Anda dapat menggunakan objek koneksi dan kursor dalam pernyataan with seperti yang ditunjukkan:
import psycopg2
# Connect to the database
with psycopg2.connect(**credentials) as conn:
# Inside this context, the connection is open and managed
with conn.cursor() as cur:
# Inside this context, the cursor is open and managed
cur.execute('SELECT * FROM my_table')
result = cur.fetchall()
print(result)
Dalam kode ini:
- Kami menggunakan
with
pernyataan untuk membuat konteks untuk mengelola koneksi database. - Di dalam konteks ini, kami membuat konteks lain untuk mengelola kursor database. Kursor ditutup secara otomatis ketika keluar dari konteks batin ini.
- Karena koneksi juga ditutup ketika keluar dari konteks luar, konstruksi ini memastikan bahwa koneksi dan kursor dikelola dengan benar—mengurangi kemungkinan kebocoran sumber daya.
Anda juga dapat menggunakan konstruksi serupa saat bekerja dengan database SQLite dan MySQL.
Modul subproses Python menyediakan fungsionalitas untuk menjalankan perintah eksternal di dalam skrip Python. Itu subprocess.Popen()
konstruktor membuat subproses baru. Yang dapat Anda gunakan dalam a with
pernyataan seperti ini:
import subprocess
# Run an external command and capture its output
with subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, text=True) as process:
output, _ = process.communicate()
print(output)
Di sini, kami menjalankan perintah Bash ls -l
perintah untuk membuat daftar panjang file di direktori saat ini:
Output >>>
total 4
-rw-rw-r-- 1 balapriya balapriya 0 Jan 5 18:31 db_info.toml
-rw-rw-r-- 1 balapriya balapriya 267 Jan 5 18:32 main.py
Sumber daya yang terkait dengan subproses dibebaskan setelah eksekusi keluar dari konteks subproses with
pernyataan.
Tipe data float bawaan di Python tidak cocok untuk aritmatika floating-point presisi tinggi. Namun Anda memang memerlukan ketelitian tinggi saat menangani data keuangan, pembacaan sensor, dan sejenisnya. Untuk aplikasi seperti itu, Anda dapat menggunakan desimal modul sebagai gantinya.
Grafik localcontext()
fungsi mengembalikan manajer konteks. Jadi Anda bisa menggunakan localcontext()
fungsi di with
pernyataan, dan atur presisi untuk konteks saat ini menggunakan seperti yang ditunjukkan:
from decimal import Decimal, localcontext
with localcontext() as cur_context:
cur_context.prec = 40
a = Decimal(2)
b = Decimal(3)
print(a/b)
Inilah hasilnya:
Output >>>
0.6666666666666666666666666666666666666667
Di sini, presisi diatur ke 40 tempat desimal—tetapi hanya dalam batas ini with
memblokir. Ketika eksekusi keluar dari konteks saat ini, presisi dikembalikan ke presisi default (28 tempat desimal).
Dalam tutorial ini, kita mempelajari bagaimana manajer konteks dapat digunakan untuk menangani koneksi database, mengelola subproses dan konteks dalam aritmatika floating-point presisi tinggi.
Dalam tutorial berikutnya, kita akan melihat bagaimana kita dapat membuat pengelola konteks khusus dengan Python. Sampai saat itu tiba, selamat coding!
Bala Priya C adalah pengembang dan penulis teknis dari India. Dia suka bekerja di persimpangan matematika, pemrograman, ilmu data, dan pembuatan konten. Bidang minat dan keahliannya meliputi DevOps, ilmu data, dan pemrosesan bahasa alami. Dia suka membaca, menulis, coding, dan kopi! Saat ini, dia sedang belajar dan berbagi pengetahuannya dengan komunitas developer dengan menulis tutorial, panduan cara kerja, opini, dan banyak lagi.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- PlatoData.Jaringan Vertikal Generatif Ai. Berdayakan Diri Anda. Akses Di Sini.
- PlatoAiStream. Intelijen Web3. Pengetahuan Diperkuat. Akses Di Sini.
- PlatoESG. Karbon, teknologi bersih, energi, Lingkungan Hidup, Tenaga surya, Penanganan limbah. Akses Di Sini.
- PlatoHealth. Kecerdasan Uji Coba Biotek dan Klinis. Akses Di Sini.
- Sumber: https://www.kdnuggets.com/3-interesting-uses-of-python-context-managers?utm_source=rss&utm_medium=rss&utm_campaign=3-interesting-uses-of-pythons-context-managers
- :memiliki
- :adalah
- :bukan
- $NAIK
- 1
- 11
- 12
- 28
- 31
- 32
- 40
- 7
- 8
- 9
- a
- Tentang Kami
- Mengakuisisi
- silam
- mengizinkan
- juga
- an
- dan
- Lain
- aplikasi
- ADALAH
- daerah
- AS
- terkait
- At
- menulis
- secara otomatis
- secara otomatis
- b
- menampar
- BE
- Memblokir
- Membosankan
- kedua
- Bangunan
- built-in
- tapi
- by
- bernama
- CAN
- menangkap
- kesempatan
- pembersih
- tertutup
- kode
- Pengkodean
- Umum
- masyarakat
- ringkas
- Terhubung
- terhubung
- koneksi
- Koneksi
- membangun
- mengandung
- Konten
- pembuatan konten
- isi
- konteks
- Konteks
- membuat
- menciptakan
- penciptaan
- Surat kepercayaan
- terbaru
- Sekarang
- adat
- data
- ilmu data
- Basis Data
- database
- Default
- Pengembang
- DevOps
- do
- melakukan
- turun
- efisien
- efisien
- Memastikan
- Masuk
- menetapkan
- contoh
- contoh
- pengecualian
- eksekusi
- Keluar
- keluar
- keahlian
- luar
- File
- File
- keuangan
- data keuangan
- Pertama
- Mengapung
- mengambang
- Fokus
- berikut
- Untuk
- dari
- fungsi
- fungsi
- mendapatkan
- Go
- baik
- Panduan
- Penanganan
- senang
- dia
- di sini
- High
- tuan rumah
- Seterpercayaapakah Olymp Trade? Kesimpulan
- HTML
- HTTPS
- i
- if
- gambar
- mengimpor
- in
- memasukkan
- India
- Info
- batin
- dalam
- install
- sebagai gantinya
- bunga
- menarik
- persimpangan
- ke
- diperkenalkan
- IT
- NYA
- jan
- jpg
- KDnugget
- pengetahuan
- bahasa
- kemudian
- kebocoran
- belajar
- pengetahuan
- Lets
- 'like'
- 'like
- Daftar
- logika
- Panjang
- melihat
- terlihat seperti
- Utama
- mengelola
- berhasil
- Manajer
- pelaksana
- matematika
- metode
- modul
- lebih
- MySQL
- Alam
- Bahasa Alami
- Pengolahan Bahasa alami
- Perlu
- New
- berikutnya
- tidak
- sekarang
- objek
- of
- on
- sekali
- hanya
- Buka
- Pendapat
- or
- Lainnya
- di luar
- keluaran
- lebih
- parameter
- Kata Sandi
- potongan-potongan
- pipa
- Tempat
- plato
- Kecerdasan Data Plato
- Data Plato
- Titik
- Ketelitian
- cetak
- memproses
- proses
- pengolahan
- Pemrograman
- tepat
- memberikan
- menyediakan
- Ular sanca
- query
- segera
- agak
- acak
- RE
- Bacaan
- wajib
- sumber
- Sumber
- pulih
- mengakibatkan
- Hasil
- Pengembalian
- Run
- s
- mengatakan
- Ilmu
- naskah
- Bagian
- melihat
- memilih
- Sensor
- set
- berbagi
- dia
- Menunjukkan
- ditunjukkan
- mirip
- Sederhana
- So
- sesuatu
- tertentu
- Pernyataan
- Laporan
- seperti itu
- cocok
- sintaksis
- Tap
- Teknis
- bahwa
- Grafik
- kemudian
- Sana.
- mereka
- ini
- Melalui
- untuk
- terlalu
- Total
- tutorial
- tutorial
- mengetik
- sampai
- menggunakan
- bekas
- berguna
- Pengguna
- kegunaan
- menggunakan
- memeriksa
- versi
- W
- ingin
- we
- ketika
- yang
- sementara
- mengapa
- akan
- dengan
- dalam
- Kerja
- alur kerja
- kerja
- menulis
- penulis
- penulisan
- menulis
- kamu
- zephyrnet.dll