السبت، 21 ديسمبر 2019

الوحدات في بايثون بيثون Python Modules

الوحدات في بايثون بيثون 

Python Modules


الوحدات في بايثون بيثون Python Modules

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

 ببساطة ، الوحدة النمطية هي ملف يتكون من كود Python.  تستطيع الوحدة النمطية تحديد الوظائف والفئات والمتغيرات.  وحدة يمكن أن تشمل أيضا رمز runnable.

مثال Example

عادةً ما يوجد رمز Python الخاص بوحدة نمطية باسم aname في ملف باسم aname.py.  فيما يلي مثال على وحدة بسيطة ، support.py
def print_func( par ):
   print "Hello : ", par
   return

The import Statement عبارة استدعاء وحدة برمجية 

يمكنك استخدام أي ملف مصدر Python كوحدة نمطية عن طريق تنفيذ عبارة استيراد في بعض ملفات Python المصدر الأخرى.  يحتوي الاستيراد على بناء الجملة التالي -
import module1[, module2[,... moduleN]
عندما يواجه المترجم عبارة استيراد ، فإنه يستورد الوحدة إذا كانت الوحدة موجودة في مسار البحث.  مسار البحث عبارة عن قائمة من الأدلة التي يبحث فيها المترجم الشفهي قبل استيراد وحدة نمطية.  على سبيل المثال ، لاستيراد الوحدة النمطية support.py ، تحتاج إلى وضع الأمر التالي في الجزء العلوي من البرنامج النصي -
#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")
عند تنفيذ الرمز أعلاه ، فإنه ينتج النتيجة التالية -
Hello : Zara
يتم تحميل الوحدة النمطية مرة واحدة فقط ، بغض النظر عن عدد مرات استيرادها.  هذا يمنع تنفيذ الوحدة النمطية من الحدوث مرارًا وتكرارًا في حالة حدوث عمليات استيراد متعددة.

 من ... استيراد البيان
 يتيح لك Python from statement استيراد سمات محددة من وحدة نمطية إلى مساحة الاسم الحالية.  من ... الاستيراد لديه بناء الجملة التالي -
from modname import name1[, name2[, ... nameN]]
على سبيل المثال ، لاستيراد الدالة fib من الوحدة النمطية fib ، استخدم العبارة التالية -
from fib import fibonacci
هذا البيان لا يستورد الوحدة النمطية بأكملها في مساحة الاسم الحالية؛  يقوم فقط بتقديم مستوى العنصر من الوحدة النمطية fib إلى جدول الرموز العمومية من وحدة الاستيراد.

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

 تحديد الوحدات
 عند استيراد وحدة نمطية ، يبحث مترجم Python عن الوحدة في التسلسلات التالية -

 الدليل الحالي.

 إذا لم يتم العثور على الوحدة النمطية ، يقوم Python بالبحث في كل دليل في متغير shell PYTHONPATH.

 إذا فشل كل شيء آخر ، بيثون يتحقق المسار الافتراضي.  على UNIX ، يكون هذا المسار الافتراضي هو / usr / local / lib / python /.

 يتم تخزين مسار البحث في الوحدة النمطية في sys.path في الوحدة النمطية للنظام.  يحتوي المتغير sys.path على الدليل الحالي ، PYTHONPATH ، والافتراضية التي تعتمد على التثبيت.

 متغير بيثونث
 PYTHONPATH هو متغير بيئة ، يتكون من قائمة الدلائل.  بناء جملة PYTHONPATH هو نفس بناء متغير PATH.

 إليك نموذج PYTHONPATH نموذجي من نظام Windows -
set PYTHONPATH = c:\python20\lib;
And here is a typical PYTHONPATH from a UNIX system −
set PYTHONPATH = /usr/local/lib/python

Namespaces and Scoping النطاقات وأسماء الفضاءات 

المتغيرات هي أسماء (معرفات) تعين الكائنات.  مساحة الاسم هي قاموس للأسماء المتغيرة (المفاتيح) والكائنات المقابلة لها (القيم).

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

 كل وظيفة لها مساحة الاسم المحلية الخاصة بها.  تتبع أساليب الفصل نفس قاعدة النطاق مثل الوظائف العادية.

 بيثون تخمينات متعلمة حول ما إذا كانت المتغيرات المحلية أو العالمية.  يفترض أن أي متغير يعيّن قيمة في دالة ما هو محلي.

 لذلك ، من أجل تعيين قيمة إلى متغير عمومي داخل دالة ، يجب أولاً استخدام العبارة العمومية.

 يخبر بيان VarName العمومي Python أن VarName متغير عمومي.  توقف Python البحث في مساحة الاسم المحلية للمتغير.

 على سبيل المثال ، نقوم بتعريف Money متغير في مساحة الاسم العمومية.  ضمن الدالة Money ، نقوم بتعيين Money ، وبالتالي فإن Python تفترض Money كمتغير محلي.  ومع ذلك ، قمنا بالوصول إلى قيمة المتغير المحلي Money قبل تعيينه ، لذلك فإن UnboundLocalError هي النتيجة.  يؤدي uncommenting العبارة العمومية إلى حل المشكلة.
#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

The dir( ) Function دولة المسار 

ترجع الدالة dir () المضمنة قائمة مرتبة من السلاسل تحتوي على الأسماء المعرفة بواسطة وحدة نمطية.

 تحتوي القائمة على أسماء جميع الوحدات النمطية والمتغيرات والوظائف المحددة في وحدة نمطية.  فيما يلي مثال بسيط -

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)
print content

عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']
هنا ، متغير السلسلة الخاص __name__ هو اسم الوحدة النمطية ، و __file__ هو اسم الملف الذي تم تحميل الوحدة النمطية منه.

The globals() and locals() Functions الدوال او الوظائف المحلية والعامة 

يمكن استخدام الدالتين globals () و locals () لإرجاع الأسماء في مساحات الأسماء العالمية والمحلية اعتمادًا على الموقع الذي يتم استدعاؤهما.

 إذا تم استدعاء السكان المحليين () من داخل إحدى الوظائف ، فسيتم إرجاع جميع الأسماء التي يمكن الوصول إليها محليًا من هذه الوظيفة.

 إذا تم استدعاء globals () من داخل دالة ، فسوف تُرجع جميع الأسماء التي يمكن الوصول إليها عالميًا من هذه الوظيفة.

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

The reload() Function دولة إعادة التحميل

عند استيراد الوحدة النمطية إلى برنامج نصي ، يتم تنفيذ التعليمات البرمجية في الجزء العلوي من الوحدة مرة واحدة فقط.

 لذلك ، إذا كنت تريد إعادة تنفيذ رمز المستوى الأعلى في وحدة نمطية ، يمكنك استخدام وظيفة reload ().  تقوم دالة reload () باستيراد وحدة نمطية تم استيرادها مسبقًا مرة أخرى.  بناء جملة الدالة reload () هو هذا -
reload(module_name)
هنا ، module_name هو اسم الوحدة التي تريد إعادة تحميلها وليس السلسلة التي تحتوي على اسم الوحدة النمطية.  على سبيل المثال ، لإعادة تحميل وحدة hello ، قم بما يلي -
reload(hello)

Packages in Python الحزم في بايثون من 

الحزمة هي بنية دليل ملف هرمي تعرّف بيئة تطبيق Python واحدة تتكون من وحدات نمطية وحزم فرعية وحزم فرعية وما إلى ذلك.

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"
 النظر في ملف Pots.py المتاحة في دليل الهاتف.  يحتوي هذا الملف على السطر التالي من التعليمات البرمجية المصدر -
from Pots import Pots
from Isdn import Isdn
from G3 import G3
بعد إضافة هذه الأسطر إلى __init__.py ، يكون لديك كل هذه الفئات المتاحة عند استيراد حزمة الهاتف.
#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone
I
ن المثال أعلاه ، لقد أخذنا مثالا على وظائف واحدة في كل ملف ، ولكن يمكنك الاحتفاظ بوظائف متعددة في ملفاتك.  يمكنك أيضًا تحديد فئات Python المختلفة في تلك الملفات ، ثم يمكنك إنشاء حزمك من تلك الفئات.


التسميات: