مكتبات بايثون
تعرفنا في الدرس السابق على المكتبة os، اليوم سنتعلم كيفية برمجة مكتبات بايثون (python libs/modules) خاصة بنا لإستخدامها في برامجنا.
على سبيل المثال بايثون لا تقوم بتوفير الدوال الخاصة بالرياضيات مباشرة :
>>> cos(30)
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
cos(30)
NameError: name 'cos' is not definedإذا كيف أتعامل مع الدوال الرياضية ؟
علينا إستدعاء المكتبة المسماة math و هي مكتبة تحتوي على العديد من الدوال الرياضية، كالتالي :
import math
كما يمكننا الإستفادة من دوالها كالتالي :
>>> import math >>> math.cos(30) 0.15425144988758405 >>> math.sin(30) -0.9880316240928618 >>> math.factorial(3) 6
لكن أين توجد هذه المكتبات ؟
مفسر بايثون لا يعلم عن كل ملف بايثون في جهازك لكن هناك بعض الأماكن التي يبحث فيها عن المكتبات فور إستدعائها مثل المجلد الحالي للسكربت و مجلد بايثون و مجلد site-package (يفضل إستخدامه عند إظافة مكتبات بايثون خاصة بك).
للحصول على القائمة كاملة التي يبحث فيها المفسر نستعمل الدالة path الموجودة في مكتبة sys.
>>> import sys >>> sys.path ['', 'C:\\Python27\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
مكتبتي الأولى
سننشئ مكتبة للرياضيات إسمها MyMath تقوم بالعمليات الأساسية +,-,*,/ :
#################
# MyMath #
# VERSION : 0.1 #
#################
def add(x, y) :
return x + y
def sub(x, y) :
return x - y
def mul(x, y) :
return x * y
def div(x, y) :
return x / yقم بحفظ هذا الملف بإسم MyMath.py في المسار التالي :
/usr/lib/python/site-packages
إستخدام المكتبة
نستدعي المكتبة كالتالي :
import MyMath
شرح إستخدام المكتبة عن طريق سكربت :
#!/usr/bin/python import MyMath print MyMath.add(1, 9) print MyMath.sub(10, 2) print MyMath.mul(5, 5) print MyMath.div(25, 5)
عند التنفيذ :
>>> ================================ RESTART ================================ >>> 10 8 25 5 >>>
النسخة الثانية من مكتبة MyMath
سنقوم بتطوير module السابقة بإضافة الدالة pwr التي تحسب القوة (الأس)، و الدالة rod التي تحسب باقي قسمة عدد على عدد، و الدالة sqr التي تحسب الجذر. كالتالي :
#################
# MyMath #
# VERSION : 0.2 #
#################
def add(x, y) :
return x + y
def sub(x, y) :
return x - y
def mul(x, y) :
return x * y
def div(x, y) :
return x / y
def pwr(x, y) :
return x ** y
def rod(x, y) :
return x % y
def sqr(x) :
return x ** 0.5هذا السكربت يستخدم النسخة الثانية من المكتبة :
#!/usr/bin/python import MyMath print MyMath.add(1, 9) print MyMath.sub(10, 2) print MyMath.mul(5, 5) print MyMath.div(25, 5) print MyMath.pwr(3, 2) print MyMath.rod(9, 2) print MyMath.sqr(9)
عند التنفيذ :
>>> ================================ RESTART ================================ >>> 10 8 25 5 9 1 3.0 >>>
النسخة الثالثة من مكتبة MyMath (كائنية)
سنقوم بتطوير المكتبة لتتبع أسلوب البرمجة الكائنية المنحى. كالتالي :
#################
# MyMath #
# VERSION : 0.3 #
#################
class calc(object) :
def add(self, x, y) :
return x + y
def sub(self, x, y) :
return x - y
def mul(self, x, y) :
return x * y
def div(self, x, y) :
return x / y
def pwr(self, x, y) :
return x ** y
def rod(self,x, y) :
return x % y
def sqr(self, x) :
return x ** 0.5
calc = calc()هذا السكربت يستخدم النسخة الثالثة من المكتبة :
#!/usr/bin/python import MyMath print MyMath.calc.add(1, 9) print MyMath.calc.sub(10, 2) print MyMath.calc.mul(5, 5) print MyMath.calc.div(25, 5) print MyMath.calc.pwr(3, 2) print MyMath.calc.rod(9, 2) print MyMath.calc.sqr(9)
عند التنفيذ :
>>> ================================ RESTART ================================ >>> 10 8 25 5 9 1 3.0 >>>
الحزم Packages
عندما يكون المشروع كبير قد نطور الكثير من المكتبات، مكتبات لقواعد البيانات، مكتبات للتعامل مع الملفات، مكتبات للشبكات ... إلخ. لذا يتوجب علينا تنظيم هذه المكتبات و فصلها في حزم كل حزمة تختص بشيء.
حزمتي الأولى - My first Package
سنقوم بتقسيم المكتبة MyMath الى 5 مكتبات كل مكتبة تحتوي على دالة رياضية، و نضع هذه المكتبات في حزمة بإسم MyMath.
أولا ننشئ مجلد جديد بإسم MyMath في المسار التالي :
/usr/lib/python/site-packages
هذا المجلد الأن ماهو إلا مجلد ليصبح حزمة علينا إنشاء ملف بإسم __init__ و بامتداد py في هذا المجلد، بإمكاننا ترك الملف فارغ لكن من الأفضل كتابة تعليقات فيه، هذا هو ملف __init__ :
"""
This package contains the following modules :
-- add --
-- sub --
-- mul --
-- div --
"""المكتبة add :
################
# add module #
# add.py #
################
def add(x, y) :
return x + yالمكتبة sub :
################
# sub module #
# sub.py #
################
def sub(x, y) :
return x - yالمكتبة mul :
################
# mul module #
# mul.py #
################
def mul(x, y) :
return x * yالمكتبة div :
################
# div module #
# div.py #
################
def div(x, y) :
return x / yسكربت يشرح إستخدام الحزمة MyMath :
#!/usr/bin/python from MyMath import add, sub, mul, div print add.add(1, 9) print sub.sub(10, 2) print mul.mul(5, 5) print div.div(25, 5)
عند التنفيذ :
>>> ================================ RESTART ================================ >>> 10 8 25 5 >>>
فهرس الدورة
الفصل الاول : أساسيات بايثون
دورة بايثون من الصفر الى الاحتراف
الدرس الاول : أمر الطباعة print + التعليقات
الدرس الثاني : المتغيرات Variables
الدرس الرابع : الجملة الشرطية if
الدرس السادس : الكائنات متعددة العناصر (الجزء الأول)
الدرس السابع : الكائنات متعددة العناصر (الجزء الثاني)
الدرس الثامن : الحلقات loops (الجزء الأول)
الدرس التاسع : الحلقات loops (الجزء الثاني)
الفصل الثاني : Functions & Procedures
الدرس العاشر : الدوال Function
الدرس الحادي عشر : دوال بايثون الجاهزة
الفصل الثالث : البرمجة الكائنية المنحى oop
الدرس الثاني عشر : رابط لتعلم البرمجة الكائنية المنحى
الفصل الرابع : الأخطاء و الإستثناءات Errors, Exceptions
الدرس الثالث عشر : التعامل مع الأخطاء (الجزء الأول)
الدرس الرابع عشر : التعامل مع الأخطاء (الجزء الثاني)
الفصل الخامس : التعامل مع الملفات
الدرس الخامس عشر : الملفات (الجزء الأول)
الدرس السادس عشر : الملفات (الجزء الثاني)
الفصل السادس : المكتبات و الحزم
