الوحدات (Modules): استيراد واستخدام المكتبات المدمجة في بايثون


اليوم، سنتعلم كيفية استيراد واستخدام الوحدات (Modules) والمكتبات المدمجة في بايثون لتوسيع قدرات برامجنا.

سنقوم ببناء برنامج بسيط يستخدم وحدات رياضية ووحدات للتعامل مع الوقت والتاريخ لإجراء بعض العمليات الأساسية.

الخطوة 1: استيراد وحدة كاملة والوصول إلى محتوياتها

الوحدة (Module) في بايثون هي ملف يحتوي على تعريفات وبيانات بايثون. يمكنها تعريف دوال، فئات، ومتغيرات. لاستيراد وحدة كاملة، نستخدم الكلمة المفتاحية import.

ملاحظة تقنية: عند استيراد وحدة كاملة، يتم إنشاء كائن وحدة في مساحة الاسم الحالية، ويجب الوصول إلى محتوياتها باستخدام اسم الوحدة متبوعاً بنقطة (.) ثم اسم العنصر.

لنبدأ باستيراد وحدة math واستخدام ثابت pi ودالة sin منها.

import math # استيراد الوحدة الرياضية 'math' بأكملها

# الوصول إلى ثابت 'pi' من الوحدة 'math'
قيمة_باي = math.pi
print(f"قيمة باي (pi) هي: {قيمة_باي}")

# استخدام دالة 'sin' من الوحدة 'math' لحساب جيب الزاوية (بالراديان)
زاوية_بالراديان = math.pi / 2 # 90 درجة بالراديان
جيب_الزاوية = math.sin(زاوية_بالراديان)
print(f"جيب الزاوية {زاوية_بالراديان} راديان هو: {جيب_الزاوية}")

الخطوة 2: استيراد عناصر محددة أو تسمية الوحدات المستوردة بأسماء مستعارة (Aliases)

في بعض الأحيان، قد نحتاج فقط إلى دوال أو ثوابت معينة من وحدة بدلاً من الوحدة بأكملها، أو قد نرغب في إعطاء اسم مستعار أقصر للوحدة لتسهيل الاستخدام. يمكن تحقيق ذلك باستخدام from ... import ... أو import ... as ....

ملاحظة تقنية: استخدام from ... import ... يجلب العناصر مباشرة إلى مساحة الاسم الحالية، مما يعني أنك لا تحتاج إلى استخدام اسم الوحدة للوصول إليها. استخدام import ... as ... مفيد لتجنب تضارب الأسماء أو لتقصير الاسم.

سنقوم الآن باستيراد دالتين محددتين sqrt و ceil من math، ووحدة datetime باسم مستعار dt.

from math import sqrt, ceil # استيراد دالتي الجذر التربيعي والتقريب للأعلى مباشرة
import datetime as dt # استيراد وحدة 'datetime' وتسميتها 'dt'

# استخدام دالة الجذر التربيعي مباشرة
عدد = 16
جذر_العدد = sqrt(عدد)
print(f"الجذر التربيعي للعدد {عدد} هو: {جذر_العدد}")

# استخدام دالة التقريب للأعلى مباشرة
عدد_عشري = 4.1
تقريب_للأعلى = ceil(عدد_عشري)
print(f"تقريب العدد {عدد_عشري} للأعلى هو: {تقريب_للأعلى}")

# استخدام وحدة 'datetime' عبر اسمها المستعار 'dt' للحصول على الوقت الحالي
الوقت_الحالي = dt.datetime.now()
print(f"الوقت والتاريخ الحالي هو: {الوقت_الحالي}")

الخطوة 3: استكشاف محتويات الوحدة

إذا لم تكن متأكداً من الدوال أو الثوابت المتاحة داخل وحدة ما، يمكنك استخدام الدالة المدمجة dir() لعرض جميع الأسماء (الدوال، المتغيرات، الفئات) المعرفة داخل الوحدة. كما يمكن استخدام help() للحصول على وثائق مفصلة.

ملاحظة تقنية: الدالة dir() مفيدة جداً للاستكشاف التفاعلي في بيئة REPL، بينما help() توفر شرحاً مفصلاً لوظائف الوحدة أو الكائنات الفردية.

لنتحقق من بعض محتويات وحدة math.

import math

# عرض جميع الأسماء المعرفة داخل وحدة 'math'
# print(dir(math)) # هذا سيطبع قائمة طويلة، يمكن تشغيله بشكل منفصل للاستكشاف

# الحصول على مساعدة حول دالة معينة داخل الوحدة
# help(math.factorial) # يمكن إلغاء التعليق لتجربتها
print("تم استيراد وحدة math بنجاح وجاهزة للاستخدام.")

الكود النهائي الكامل

هذا هو الكود المجمع الذي يوضح استخدام الوحدات math و datetime بأساليب الاستيراد المختلفة.

import math # استيراد الوحدة الرياضية 'math' بأكملها
from math import sqrt, ceil # استيراد دالتي الجذر التربيعي والتقريب للأعلى مباشرة
import datetime as dt # استيراد وحدة 'datetime' وتسميتها 'dt'

print("--- استخدام وحدة math ---")
# الوصول إلى ثابت 'pi' من الوحدة 'math'
قيمة_باي = math.pi
print(f"قيمة باي (pi) هي: {قيمة_باي}")

# استخدام دالة 'sin' من الوحدة 'math' لحساب جيب الزاوية (بالراديان)
زاوية_بالراديان = math.pi / 2
جيب_الزاوية = math.sin(زاوية_بالراديان)
print(f"جيب الزاوية {زاوية_بالراديان} راديان هو: {جيب_الزاوية}")

# استخدام دالة الجذر التربيعي مباشرة (تم استيرادها بـ from)
عدد_للجذر = 25
جذر_العدد = sqrt(عدد_للجذر)
print(f"الجذر التربيعي للعدد {عدد_للجذر} هو: {جذر_العدد}")

# استخدام دالة التقريب للأعلى مباشرة (تم استيرادها بـ from)
عدد_للتفريب = 7.3
تقريب_للأعلى = ceil(عدد_للتفريب)
print(f"تقريب العدد {عدد_للتفريب} للأعلى هو: {تقريب_للأعلى}")

print("\n--- استخدام وحدة datetime ---")
# استخدام وحدة 'datetime' عبر اسمها المستعار 'dt' للحصول على الوقت الحالي
الوقت_الحالي = dt.datetime.now()
print(f"الوقت والتاريخ الحالي هو: {الوقت_الحالي}")

# مثال آخر: إنشاء تاريخ محدد
تاريخ_محدد = dt.date(2023, 10, 26)
print(f"تاريخ محدد: {تاريخ_محدد}")

النتيجة المتوقعة

عند تشغيل السكربت أعلاه، ستظهر المخرجات التالية على الشاشة. ستختلف قيمة الوقت والتاريخ بناءً على وقت تشغيل السكربت.

---
--- استخدام وحدة math ---
قيمة باي (pi) هي: 3.141592653589793
جيب الزاوية 1.5707963267948966 راديان هو: 1.0
الجذر التربيعي للعدد 25 هو: 5.0
تقريب العدد 7.3 للأعلى هو: 8

--- استخدام وحدة datetime ---
الوقت والتاريخ الحالي هو: 2023-10-26 10:30:45.123456 (مثال، سيختلف الوقت الفعلي)
تاريخ محدد: 2023-10-26
---