Python Tutorials

مساحات الأسماء والمدى في بايثون

Spread the love

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

محتويات

  1. الأسماء في بايثون
  2. مساحات الأسماء في بايثون
  3. نطاق المتغيرات في بايثون
  4. التطبيقات العملية لنطاق المتغيرات ومساحات الأسماء

1. الأسماء في بايثون

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


my_variable = 10  # 'my_variable' هو الاسم، و 10 هو كائن عدد صحيح.

هنا، my_variable هو الاسم الذي يشير إلى كائن عدد صحيح بقيمة 10. الأسماء حساسة لحالة الأحرف؛ my_variable و My_Variable هما أسماء مختلفة.

2. مساحات الأسماء في بايثون

مساحة الاسم هي حاوية لتنظيم الأسماء لمنع التعارضات. تعمل مثل القاموس: المفاتيح هي الأسماء، والقيم هي الكائنات التي تمثلها هذه الأسماء. تستخدم بايثون عدة أنواع من مساحات الأسماء:

  • مساحة الأسماء المدمجة: تحتوي على أسماء مُعرّفة مسبقًا (مثل print()، len()) متاحة في جميع برامج بايثون. يتم إنشاؤها عند بدء تشغيل المُفسّر.
  • مساحة الأسماء العالمية: تحتوي على الأسماء المُعرّفة على مستوى الوحدة النمطية (ملف .py). يتم إنشاؤها عند تحميل وحدة نمطية.
  • مساحة الأسماء المحلية: تحتوي على الأسماء المُعرّفة داخل دالة. يتم إنشاؤها عند استدعاء دالة ويتم تدميرها عند عودتها.
  • المحليات للدوال المغلّفة: يمكن للدوال المُتداخلة الوصول إلى مساحات أسماء الدوال المغلّفة بها.

يتبع بحث بايثون عن مساحة الاسم قاعدة LEGB: Local → Enclosing function locals → Global → Built-in. عندما يُصادف اسم، تبحث بايثون في هذه مساحات الأسماء بالتسلسل. يحدث خطأ NameError إذا لم يتم العثور على الاسم.

3. نطاق المتغيرات في بايثون

النطاق يُعرّف المنطقة التي يكون فيها الاسم مرئيًا وقابلًا للوصول إليه. يتم تحديد نطاق المتغير من خلال موقعه في الكود ويرتبط مباشرة بمساحة اسمه.


global_var = 100

def my_function():
    local_var = 20
    print(global_var)  # الوصول إلى المتغير العالمي
    print(local_var)  # الوصول إلى المتغير المحلي

my_function()
print(global_var)  # الوصول إلى المتغير العالمي
#print(local_var)  # NameError: name 'local_var' is not defined

في هذا المثال، global_var له نطاق عالمي، بينما local_var له نطاق محلي (محدود بـ my_function).

4. التطبيقات العملية لنطاق المتغيرات ومساحات الأسماء

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

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *