3 Penggunaan Menarik dari Manajer Konteks Python - KDnuggets

3 Kegunaan Menarik dari Manajer Konteks Python – KDnuggets

Node Sumber: 3084989

3 Penggunaan Menarik dari Manajer Konteks Python
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.

 

3 Penggunaan Menarik dari Manajer Konteks Python
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.

 

3 Penggunaan Menarik dari Manajer Konteks Python
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.

Stempel Waktu:

Lebih dari KDnugget