القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس الواحد والعشرون (وحدات بايثون Python Modules)

دورة البرمجة بلغة بايثون - الدرس الواحد والعشرون (وحدات بايثون Python Modules)
 

دورة البرمجة بلغة بايثون - الدرس الواحد والعشرون (وحدات بايثون Python Modules)

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


ما هي الوحدات في بايثون؟

تشير الوحدات النمطية إلى ملف يحتوي على عبارات وتعريفات بايثون.


يُطلق على الملف الذي يحتوي على كود بايثون ، على سبيل المثال: example.py وحدة نمطية ، وسيكون اسم الوحدة الخاص بها exmple.


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


يمكننا تحديد الوظائف الأكثر استخدامًا في الوحدة النمطية واستيرادها ، بدلاً من نسخ تعريفاتها في برامج مختلفة.


دعونا ننشئ وحدة. اكتب ما يلي واحفظه باسم exmple.py.

# Python Module example

def add(a, b):
   """This program adds two
   numbers and return the result"""

   result = a + b
   return result

هنا ، قمنا بتعريف دالة add داخل وحدة تسمى example. تأخذ الدالة رقمين وتعيد مجموعهما.


كيف تستورد الوحدات في بايثون؟

يمكننا استيراد التعريفات داخل وحدة نمطية إلى وحدة نمطية أخرى أو المترجم التفاعلي في بايثون.


سنستخدم كلمة import للقيام بذلك. لاستيراد الوحدة example المحددة مسبقًا ، نكتب ما يلي في موجه بايثون.


>>> import example


هذا الكود لا يستورد أسماء الوظائف المعرفة داخل ملف example مباشرة في جدول الرموز الحالي. فقط يستورد اسم الوحدة النمطية هناك.


باستخدام اسم الوحدة ، يمكننا الوصول إلى الدالة باستخدام النقطة (.) فمثلا:


>>> example.add(4,5.5)
9.5


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


يمكن استيراد الوحدات القياسية بنفس الطريقة التي نستورد بها الوحدات التي ينشئها المستخدم.


هناك طرق مختلفة لاستيراد الوحدات. تم سردها أدناه ..


جملة الاستيراد بايثون

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

# import statement example
# to import standard module math

import math
print("The value of pi is", math.pi)


عند تشغيل البرنامج ، سيكون الإخراج:

The value of pi is 3.141592653589793


الاستيراد مع إعادة التسمية

يمكننا استيراد وحدة عن طريق إعادة تسميتها على النحو التالي:

# import module by renaming it

import math as m
print("The value of pi is", m.pi)

لقد أعدنا تسمية وحدة math باسم m. يمكن أن يوفر لنا هذا الوقت في الكتابة في بعض الحالات.


لاحظ أنه لم يتم التعرف على اسم math في نطاقنا. ومن ثم ، فإن math.pi غير صالح ، و m.pi هو التطبيق الصحيح.


جمل from...import

يمكننا استيراد أسماء محددة من وحدة دون استيراد الوحدة ككل. هنا مثال.

# import only pi from math module

from math import pi
print("The value of pi is", pi)

هنا ، قمنا باستيراد سمة pi فقط من وحدة math.


في مثل هذه الحالات ، لا نستخدم عامل التشغيل النقطي. يمكننا أيضًا استيراد سمات متعددة على النحو التالي:

>>> from math import pi, e
>>> pi
3.141592653589793
>>> e
2.718281828459045

استيراد جميع الأسماء

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

# import all names from the standard module math

from math import *
print("The value of pi is", pi)

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


إن استيراد كل شيء بعلامة النجمة (*) ليس ممارسة برمجية جيدة. هذا يمكن أن يؤدي إلى تعريفات مكررة لمعرف. كما أنه يعيق قراءة الكود الخاص بنا.


مسار بحث وحدة بايثون

أثناء استيراد وحدة نمطية ، تبحث بايثون في عدة أماكن. يبحث المترجم الفوري أولاً عن وحدة مدمجة. ثم (إذا لم يتم العثور على الوحدة النمطية المضمنة) ، تبحث بايثون في قائمة الأدلة المحددة في sys.path. البحث بهذا الترتيب.

  • الدليل الحالي.
  • PYTHONPATH.
  • الدليل الافتراضي المعتمد على التثبيت.

>>> import sys
>>> sys.path
['',
'C:\\Python33\\Lib\\idlelib',
'C:\\Windows\\system32\\python33.zip',
'C:\\Python33\\DLLs',
'C:\\Python33\\lib',
'C:\\Python33',
'C:\\Python33\\lib\\site-packages']


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


إعادة تحميل وحدة نمطية

يستورد مترجم بايثون الوحدة مرة واحدة فقط خلال الجلسة. هذا يجعل الأشياء أكثر كفاءة. هنا مثال يوضح كيف يعمل هذا.

# This module shows the effect of
#  multiple imports and reload

print("This code got executed")


الآن نرى تأثير عمليات الاستيراد المتعددة.

>>> import my_module
This code got executed
>>> import my_module
>>> import my_module

يمكننا أن نرى أنه تم تنفيذ الكود الخاص بنا مرة واحدة فقط. هذا يعني أنه تم استيراد الوحدة الخاصة بنا مرة واحدة فقط.


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


توفر بايثون طريقة أكثر فاعلية للقيام بذلك. يمكننا استخدام دالة reload داخل وحدة imp لإعادة تحميل الوحدة. يمكننا القيام بذلك بالطرق التالية:

>>> import imp
>>> import my_module
This code got executed
>>> import my_module
>>> imp.reload(my_module)
This code got executed
<module 'my_module' from '.\\my_module.py'>


الدالة المدمجة dir

يمكننا استخدام الدالة dir لاكتشاف الأسماء المحددة داخل الوحدة النمطية.


على سبيل المثال ، حددنا دالة add في مثال الوحدة التي كان لدينا في البداية.


يمكننا استخدام dir في نموذج الوحدة بالطريقة التالية:

>>> dir(example)
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__initializing__',
'__loader__',
'__name__',
'__package__',
'add']

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


على سبيل المثال ، تحتوي السمة __name__ على اسم الوحدة.

>>> import example
>>> example.__name__
'example'

يمكن العثور على جميع الأسماء المحددة في مساحة الاسم الحالية لدينا باستخدام الدالة dir دون أي وسيطات.

>>> a = 1
>>> b = "hello"
>>> import math
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']




reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات