توفر لغة بايثون مجموعة متنوعة من الدوال المضمّنة مثل:
-
print()
: تطبع التعابير المُمرَّرة إليها في مجرى الخرج -
abs()
: تُعيد القيمة المطلقة للعدد -
int()
: تحوِّل نوع بيانات إلى عدد صحيح -
len()
: تُعيد طول تسلسل أو مجموعة
هذه الدوال المضمّنة وغيرها مفيدة، لكنها محدودة، لهذا يستخدم المطورون الوحدات (modules) لتطوير برامج أكثر تعقيدًا.
الوحدات (Modules) هي ملفات بايثون ذات امتداد
.py، والتي تحوي شيفرات بايثون. يمكن التعامل مع أيّ ملف بايثون على أنه وحدة. مثلًا، إن كان هناك ملف بايثون يسمى hello.py
، فسيكون اسم الوحدة المقابلة له hello
، والذي يمكن استيراده في ملفات بايثون الأخرى، أو استخدامه في مترجم (interpreter) سطر أوامر بايثون. ستتعلم في المقالة التالية كيفية إنشاء الوحدات.
يمكن للوحدات أن تعرِّف دوالًا وأصنافًا ومتغيرات يمكن الرجوع إليها من ملفات بايثون الأخرى، أو من مترجم سطر أوامر بايثون.
في بايثون، يمكنك الوصول إلى الوحدات باستخدام العبارة import
. عند فعل ذلك، ستُنفَّذ شيفرة الوحدة، مع الاحتفاظ بنطاقات (scopes) التعريفات حتى تكون متاحة في ملفك الحالي.
عندما تستورد بايثون وحدةً باسم hello
على سبيل المثال، فسيبحث المترجم أولًا عن وحدة مضمّنة باسم hello
. فإن لم يجد، فسيبحث عن ملف يسمى hello.py
في قائمة من المجلدات يحددها المتغير sys.path
.
سيرشدك هذا الدرس إلى كيفية البحث عن الوحدات وتثبيتها، واستيرادها، وإعادة تسميتها (aliasing).
تثبيت الوحدات
هناك عدد من الوحدات المضمنة في مكتبة بايثون القياسية التي تحتوي على العديد من الوحدات التي توفر الكثير من وظائف النظام، أو توفر حلولًا قياسية. مكتبة بايثون القياسية تأتي مع كل توزيعات بايثون.
للتحقق من أنّ وحدات بايثون جاهزة للعمل، ادخل إلى بيئة برمجة بايثون 3 المحلية، أو بيئة البرمجة المستندة إلى الخادم، وشغّل مترجم بايثون في سطر الأوامر على النحو التالي:
(my_env) sammy@ubuntu:~/environment$ python
من داخل المترجم، يمكنك تنفيذ العبارة import
مع اسم الوحدة للتأكد من أنّها جاهزة:
import math
لمّا كانت math
وحدة مضمّنة، فينبغي أن يُكمل المترجم المهمة دون أي مشاكل، ثم يعود إلى المحث (prompt). هذا يعني أنك لست بحاجة إلى فعل أيّ شيء للبدء في استخدام الوحدة math
.
لننفِّذ الآن العبارة import
مع وحدة قد لا تكون مُثبّتة عندك، مثل matplotlib
، وهي مكتبة للرسم ثنائي الأبعاد:
import matplotlib
إذا لم تكن matplotlib
مثبتة، فستتلقّى خطأً مثل هذا:
ImportError: No module named 'matplotlib'
يمكنك إيقاف مترجم بايثون بالضغط على CTRL + D
، ثم تثبيت الوحدة matplotlib
عبر pip بتنفيذ الأمر التالي:
(my_env) sammy@ubuntu:~/environment$ pip install matplotlib
بمجرد تثبيتها، يمكنك استيراد matplotlib
من مترجم بايثون باستخدام import matplotlib
، ولن يحدث أيّ خطأ.
استيراد الوحدات
للاستفادة من الدوال الموجودة في الوحدة، ستحتاج إلى استيراد الوحدة عبر التعليمة import
.
تتألف التعليمة import
من الكلمة المفتاحية import
معقوبة باسم الوحدة.
يُصرَّح عن عملية استيراد الوحدات في أعلى ملفات بايثون، قبل الأسطر التوجيهية (shebang lines أي الأسطر التي تبدأ بـ #!
)، أو التعليقات العامة.
لذلك، سنستورد في ملف برنامج بايثون my_rand_int.py
الوحدة random
لتوليد أعداد عشوائية على النحو التالي:
import random
عندما نستورد وحدة، فإننا نجعلها متاحة في برنامجنا الحالي كفضاء أسماء (namespace) منفصل. هذا يعني أنه سيتعيّن علينا الرجوع إلى الدالة باستخدام الصياغة النقطية (dot notation) على النحو التالي [module].[function]
.
عمليًا، باستخدام مثال الوحدة random
، ستبدو الشفرة كما يلي:
-
random.randint()
: تستدعي الدالة لإعادة عدد صحيح عشوائي، أو -
random.randrange()
: تستدعي الدالة لإعادة عنصر عشوائي من نطاق محدد.
دعنا ننشئ حلقة for لتوضيح كيفية استدعاء دالة من الوحدة random
ضمن البرنامج my_rand_int.py
:
import random for i in range(10): print(random.randint(1, 25))
يستورد هذا البرنامج الصغير الوحدة random
في السطر الأول، ثم ينتقل إلى الحلقة for التي ستمر على 10 عناصر. داخل الحلقة، سيطبع البرنامج عددًا صحيحًا عشوائيًا من المجال 1
إلى 25
(مشمول). يُمرّّر العددان الصحيحان 1 و 25 إلى random.randint()
كمعاملين.
عند تنفيذ البرنامج باستخدام الأمرpython my_rand_int.py
، ستظهر 10 أعداد صحيحة عشوائية في المخرجات. نظرًا لأنّ هذه العناصر عشوائية، فستحصل على الأرجح على أعداد مختلفة في كل مرة تنفّذ فيها البرنامج، لكنها عمومًا ستبدو كما يلي:
6 9 1 14 3 22 10 1 15 9
الأعداد الصحيحة كلها محصورة بين 1
و 25
.
إذا كنت ترغب في استخدام دوال من أكثر من وحدة، يمكنك ذلك عن طريق إضافة عدة تعليمات استيراد:
import random import math
قد تصادف برامج تستورد عدة وحدات مفصولة بفواصل - مثل import random, math
- ولكنّ هذا لا يتوافق مع دليل التنسيق PEP 8.
للاستفادة من الوحدة الإضافية، يمكننا إضافة الثابت pi
من الوحدة math
إلى برنامجنا، وتقليل عدد الأعداد الصحيحة العشوائية المطبوعة:
import random import math for i in range(5): print(random.randint(1, 25)) print(math.pi)
الآن، عند تنفيذ البرنامج، سنحصل على مخرجات على الشكل التالي، مع تقريب للعدد pi
في السطر الأخير:
18 10 7 13 10 3.141592653589793
تتيح لك التعليمة import
استيراد وحدة واحدة أو أكثر إلى برامجك، وهذ يمكّنك من الاستفادة مما تحويها تلك الوحدات.
استخدام الصياغة from ... import
للإشارة إلى عناصر من وحدة مستوردة ضمن فضاء الأسماء، يمكنك استخدام التعليمة from ... import
. عندما تستورد الوحدات بهذه الطريقة، سيكون بمقدورك الرجوع إلى الدوال بأسمائها فقط، بدلًا من استخدام الصياغة النقطية.
في هذه الصياغة، يمكنك تحديد التعريفات التي تود الإشارة إليها مباشرة.
في بعض البرامج، قد ترى العبارة * from ... import
، إذ تشير العلامة *
إلى جميع العناصر الموجودة في الوحدة، ولكنّ هذه الصياغة غير معتمدة في PEP 8.
سنحاول في البداية استيراد دالة واحدة من الوحدة random
، وهي randint()
:
from random import randint
هنا، نستدعي أولًا الكلمة المفتاحية from
، ثم random
. بعد ذلك، نستخدم الكلمة المفتاحية import
، ونستدعي الدالة المحددة التي نودّ استخدامها.
الآن، عندما نرغب في استخدام هذه الدالة في برنامجنا، لن نستدعي الدالة وفق الصياغة النقطية، random.randint()
، ولكن سنستدعيها باسمها مباشرةً، أي randint()
:
from random import randint for i in range(10): print(randint(1, 25))
عند تنفيذ البرنامج، ستتلقى مخرجات مشابهة لما تلقيته مسبقًا.
يتيح لنا استخدام from ... import
الرجوع إلى العناصر المعرّفة في الوحدة من فضاء الأسماء الخاص ببرنامجنا، مما يتيح لنا تجنب استخدام الصياغة النقطية الطويلة.
الأسماء المستعارة في الوحدات
يمكن تعديل أسماء الوحدات ودوالها داخل بايثون باستخدام الكلمة المفتاحية as
.
قد ترغب في تغيير اسم ما لأنك تستخدمه سلفًا في برنامجك، أو أنه مستخدم في وحدة أخرى مستوردة، أو قد ترغب في اختصار اسم طويل تستخدمه كثيرًا. يمكنك ذلك عبر الصياغة التالية:
import [module] as [another_name]
لنعدّل اسم الوحدة math
في ملف البرنامج my_math.py
. سنغيّر اسم الوحدة math
إلى m
من أجل اختصاره. سيبدو برنامجنا المعدل كالتالي:
import math as m print(m.pi) print(m.e)
سنشير داخل البرنامج إلى الثابت pi
بالتعبير m.pi
، بدلًا من math.pi
.
يشيع في بعض الوحدات استخدام أسماء مستعارة (aliases) محدَّدة. فمثلًا، يدعو التوثيق الرسمي للوحدة matplotlib.pyplot
إلى استخدام الاسم المستعار plt
:
import matplotlib.pyplot as plt
يسمح هذا للمبرمجين بإلحاق الكلمة القصيرة plt
بأي دالة متاحة داخل الوحدة، كما هو الحال في plt.show()
.
خلاصة
يسمح مفهوم الوحدات باستدعاء دوال غير مضمّنة في بايثون. فبعض الوحدات مُثبّتة كجزء من بايثون، وبعضها سنثبّتها عبر pip.
يتيح لنا استخدام الوحدات توسيع برامجنا وتقويتها، لأنها تضع تحت تصرّفنا شفرات جاهزة للاستخدام. يمكننا أيضًا إنشاء وحدات خاصة بنا، لنستخدمها نحن، أو المبرمجون الآخرون وهذا ما سنتعرف عليه في المقال التالي.
هذه المقالة جزء من سلسة مقالات حول تعلم البرمجة في بايثون 3.
ترجمة -وبتصرّف- للمقال How To Import Modules in Python 3 لصاحبته Lisa Tagliaferri.
اقرأ أيضًا
- المقالة التالية: كيفية كتابة الوحدات في بايثون 3
- المقالة السابقة: فهم القواميس في بايثون 3
- المرجع الشامل إلى تعلم لغة بايثون
- كتاب البرمجة بلغة بايثون
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.