شعار زيفيرنت

3 استخدامات مثيرة للاهتمام لمديري السياق في بايثون - KDnuggets

التاريخ:

3 استخدامات مثيرة للاهتمام لمديري سياق بايثون
الصورة عن طريق جونستوكر على Freepik
 

منذ فترة كتبت درسا عن كتابة كود بايثون الفعال. تحدثت فيه عن استخدام مديري السياق وعبارة with لإدارة الموارد بكفاءة.

لقد استخدمت مثالًا بسيطًا لمعالجة الملفات لإظهار كيفية إغلاق الملفات تلقائيًا عند انتهاء التنفيذ من الكتلة - حتى لو كان هناك استثناء.

على الرغم من أن التعامل مع الملفات يعد مثالًا أوليًا جيدًا، إلا أنه قد يصبح مملًا بسرعة. ولهذا السبب أود أن أتطرق إلى الاستخدامات الأخرى المثيرة للاهتمام لمديري السياق - بما يتجاوز معالجة الملفات - في هذا البرنامج التعليمي. سنركز على التعامل مع اتصالات قاعدة البيانات، وإدارة العمليات الفرعية، وحساب الفاصلة العائمة عالية الدقة.

يسمح لك مديرو السياق في Python بكتابة تعليمات برمجية أكثر وضوحًا عند العمل مع الموارد. أنها توفر صيغة موجزة لإعداد الموارد وتمزيقها من خلال:

  • An أدخل المنطق الذي يتم استدعاؤه عندما يدخل التنفيذ إلى السياق و
  • An خروج يتم استدعاء المنطق عندما يخرج التنفيذ من السياق 

أبسط مثال على ذلك هو التعامل مع الملفات. هنا نستخدم open() وظيفة في with بيان للحصول على معالج الملف:

with open('filename.txt', 'w') as file:
    file.write('Something random')

 

يؤدي هذا إلى اكتساب المورد - كائن الملف - الذي يتم استخدامه (نكتب في الملف) داخل كتلة التعليمات البرمجية. يتم إغلاق الملف بمجرد خروج التنفيذ من السياق؛ لذلك لا يوجد تسرب للموارد.

يمكنك كتابة النسخة العامة من هذا مثل هذا:

with some_context() as ctx:
    # do something useful on the resource!

# resource cleanup is automatic

 

والآن دعنا ننتقل إلى الأمثلة المحددة.

عندما تقوم بإنشاء تطبيقات بايثون، من الشائع جدًا الاتصال بقواعد البيانات والاستعلام عن الجداول التي تحتوي عليها. وسيبدو سير العمل للقيام بذلك كما يلي:

  • قم بتثبيت موصل قاعدة البيانات للعمل مع قاعدة البيانات (مثل psycopg2 لـ Postgres وmysql-connector-python لقواعد بيانات MySQL).
  • تحليل ملف التكوين لاسترداد معلمات الاتصال. 
  • استخدم connect() وظيفة لإنشاء اتصال بقاعدة البيانات.

 

3 استخدامات مثيرة للاهتمام لمديري سياق بايثون
الاتصال بقاعدة البيانات | الصورة من قبل المؤلف
 

بمجرد الاتصال بقاعدة البيانات، يمكنك إنشاء قاعدة بيانات للاستعلام عن قاعدة البيانات. قم بتشغيل الاستعلامات وجلب نتائج الاستعلام باستخدام أساليب التشغيل وجلب المؤشر.

 

3 استخدامات مثيرة للاهتمام لمديري سياق بايثون
الاستعلام عن ديسيبل | الصورة من قبل المؤلف
 

عند القيام بذلك، يمكنك إنشاء الموارد التالية: اتصال بقاعدة البيانات ومؤشر قاعدة البيانات. الآن دعونا نكتب مثالًا عامًا بسيطًا لنرى كيف يمكننا استخدام الاتصال وكائنات المؤشر كمديرين للسياق.

تحليل ملفات TOML في بايثون

خذ بعين الاعتبار نموذج ملف TOML، مثل db_config.toml، الذي يحتوي على المعلومات المطلوبة للاتصال بقاعدة البيانات:

# db_config.toml

[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"

 

ملاحظات: أنت بحاجة إلى Python 3.11 أو إصدار أحدث لاستخدامه تومليب.

 

بايثون لديها المدمج في تومليب الوحدة النمطية (المقدمة في Python 3.11) التي تتيح لك تحليل ملفات TOML. لذا يمكنك فتح الملف db_config.toml وتحليل محتوياته كما يلي:

import tomllib

with open('db_config.toml','rb') as file:
	credentials = tomllib.load(file)['database']

 

لاحظ أننا قمنا بالنقر على قسم "قاعدة البيانات" في ملف db_config.toml. ال load() ترجع الدالة قاموس بايثون. يمكنك التحقق من ذلك عن طريق طباعة محتويات credentials:

print(credentials)

 

Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}

الاتصال بقاعدة البيانات

لنفترض أنك تريد الاتصال بقاعدة بيانات Postgres. يمكنك تثبيت موصل psycopg2 باستخدام النقطة:

pip install psycopg2

 

يمكنك استخدام كل من كائنات الاتصال والمؤشر مع العبارات كما هو موضح:

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)

 

في هذا الكود:

  • نستخدم with بيان لإنشاء سياق لإدارة اتصال قاعدة البيانات. 
  • داخل هذا السياق، نقوم بإنشاء سياق آخر لإدارة مؤشر قاعدة البيانات. يتم إغلاق المؤشر تلقائيًا عند الخروج من هذا السياق الداخلي.
  • ونظرًا لأن الاتصال يتم إغلاقه أيضًا عند الخروج من السياق الخارجي، فإن هذا البناء يضمن إدارة كل من الاتصال والمؤشر بشكل صحيح - مما يقلل من فرصة تسرب الموارد.

يمكنك استخدام بنية مشابهة عند العمل مع قواعد بيانات SQLite وMySQL أيضًا.

توفر وحدة العمليات الفرعية في Python وظيفة لتشغيل أوامر خارجية داخل برنامج Python النصي. ال subprocess.Popen() يقوم المُنشئ بإنشاء عملية فرعية جديدة. والتي يمكنك استخدامها في with بيان مثل ذلك:

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)

 

هنا نقوم بتشغيل أمر Bash ls -l أمر لقائمة طويلة من الملفات في الدليل الحالي:

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

 

يتم تحرير الموارد المرتبطة بالعملية الفرعية بمجرد خروج التنفيذ من سياق العملية with بيان. 

نوع البيانات العائمة المدمج في Python غير مناسب لحسابات الفاصلة العائمة عالية الدقة. لكنك تحتاج إلى دقة عالية عند التعامل مع البيانات المالية وقراءات أجهزة الاستشعار وما شابه. لمثل هذه التطبيقات، يمكنك استخدام عدد عشري وحدة بدلا من ذلك. 

localcontext() وظيفة إرجاع مدير السياق. لذلك يمكنك استخدام localcontext() وظيفة في with العبارة، وقم بتعيين الدقة للسياق الحالي باستخدام كما هو موضح:

from decimal import Decimal, localcontext

with localcontext() as cur_context:
    cur_context.prec = 40
    a = Decimal(2)
    b = Decimal(3)
    print(a/b)

 

وهنا الإخراج:

Output >>>
0.6666666666666666666666666666666666666667

 

هنا، يتم ضبط الدقة على 40 منزلة عشرية، ولكن ضمن هذا فقط with حاجز. عندما يخرج التنفيذ من السياق الحالي، تتم استعادة الدقة إلى الدقة الافتراضية (28 منزلة عشرية).

في هذا البرنامج التعليمي، تعلمنا كيف يمكن استخدام مديري السياق للتعامل مع اتصالات قاعدة البيانات، وإدارة العمليات الفرعية والسياقات في حساب الفاصلة العائمة عالي الدقة.

في البرنامج التعليمي التالي، سنرى كيف يمكننا إنشاء مديري سياقات مخصصين في بايثون. حتى ذلك الحين، برمجة سعيدة!
 
 

بالا بريا سي مطور وكاتب تقني من الهند. تحب العمل في تقاطع الرياضيات والبرمجة وعلوم البيانات وإنشاء المحتوى. تشمل مجالات اهتمامها وخبرتها DevOps وعلوم البيانات ومعالجة اللغة الطبيعية. تستمتع بالقراءة والكتابة والترميز والقهوة! تعمل حاليًا على التعلم ومشاركة معرفتها مع مجتمع المطورين من خلال تأليف برامج تعليمية وأدلة إرشادية ومقالات رأي والمزيد.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة