مقدمة
تعتبر Scope من المفاهيم الأساسية في لغة البرمجة Python، حيث تحدد إمكانية الوصول إلى الكائنات في اللغة. يجب عليك تحديد الـ scope للوصول إلى متغير معين في الشيفرة، حيث لا يمكن الوصول إليه من أي مكان في البرنامج. يُعرَّف الـ scope على أنها المنطقة البرمجية الخاصة التي تحدد رؤية المتغيرات، حيث يمكن للمبرمجين تقييد رؤيتها. يُحدد الـ scope أي متغيرات هي "مرئية". ويعتبر الـ namespace هو التعريف الفريد للمتغير أو الدالة في Python، حيث يُخبر الـ namespace مترجم Python عن اسم الكائن والموقع من حيث يحاول الوصول إليه.
قاعدة LEGB
تستخدم قاعدة LEGB للبحث عن الـ Namespaces لحل النطاق. تعني LEGB الآتي:
- L: Local (محلي)
- E: Enclosed (محيط)
- G: Global (عام)
- B: Built-in (مدمج)
تكون تسلسل LEGB مهمًا. يبحث البرنامج أولا عن المتغير في النطاق المحلي، ثم في النطاق المحيط، تلاه النطاق العام، وأخيرًا النطاق المدمج.
أنواع الـ Scope في Python
1. الـ Local Scope
المتغيرات المُعرّفة داخل الدالة تكون ضمن الـ local scope. هذه المتغيرات موجودة داخل جسم الدالة. لنفهم هذا المفهوم، لنلقي نظرة على المثال التالي:
num = 0
def demo():
num = 1
print("العدد هو:", num)
demo()
2. الـ Global Scope
المتغيرات التي يمكن قراءتها من أي مكان في البرنامج تُعرف بالـ global scope. يمكن الوصول إليها داخل وخارج الدوال. يُستخدم الكلمة الرئيسية global عندما نريد استخدام نفس المتغير في باقي البرنامج. على سبيل المثال:
def demo():
print(Str)
# Global
Str = "أنت ذكي"
demo()
3. الـ Non-Local أو Enclosing Scope
المتغيرات الـ non-local هي تلك التي يتم تعريفها في الدالة المتداخلة. يعني ذلك أن المتغير يمكن ألا يكون في النطاق المحلي ولا في النطاق العام. كلمة nonlocal تُستخدم لإنشاء متغير غير محلي. كمثال:
def func_outer():
x = "local"
def func_inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
func_inner()
print("outer:", x)
func_outer()
4. الـ Built-in Scope
إذا لم يتم تعريف متغير في النطاق المحلي أو المحيط أو العام، يقوم Python بالبحث عنه في النطاق المدمج. كما هو موضح في المثال التالي:
from math import pi
def func_outer():
print(pi)
func_outer()
ختاماً
في هذا المقال، تعرفنا على مفهوم الـ scope في لغة Python. وتعلمنا أربعة أنواع من الـ scope - global وlocal وenclosed وbuilt-in. كما تعلمنا متى نستخدم global و nonlocal. نأمل أن يكون هذا المفهوم قد توضح بشكل جيد.
المقالة الموصى بها
هذا هو دليلنا لفهم مفهوم الـ scope في لغة Python. ناقشنا التعريف والأنواع الأربعة للـ scope مع الأمثلة. يمكنك أيضًا مراجعة مقالاتنا الأخرى ذات الصلة للمزيد من المعرفة - (Tuples في Python، الكبسولة في Python، بدائل Python، والتوريث في Python).