المتغيرات العامة (Global Variables) في بايثون هي متغيرات يتم تعريفها خارج أي دالة (Function) أو فئة (Class)، مما يجعلها متاحة للوصول والاستخدام من أي مكان في البرنامج، سواء داخل الدوال أو خارجها. بمعنى آخر، نطاق هذه المتغيرات يشمل البرنامج بأكمله.
شرح مفصل:
- التعريف: يتم تعريف المتغير العام عن طريق إسناد قيمة له خارج أي دالة. مثال:
x = 10 # متغير عام
def my_function(): print(x) # الوصول إلى المتغير العام داخل دالة
my_function() # طباعة 10print(x) # طباعة 10
-
الوصول: يمكن الوصول إلى قيمة المتغير العام وقراءتها من أي مكان في البرنامج. في المثال السابق، تم الوصول إلى قيمة
x
داخل الدالةmy_function
وخارجها. -
التعديل: لتعديل قيمة متغير عام من داخل دالة، يجب استخدام الكلمة المفتاحية
global
قبل اسم المتغير داخل الدالة. هذا يُعلِم بايثون بأننا نريد تعديل المتغير العام وليس إنشاء متغير محلي بنفس الاسم داخل الدالة. مثال:
x = 10
def modify_x(): global x # الإشارة إلى أننا نعدل المتغير العام x x = 20
modify_x()
print(x) # طباعة 20
بدون استخدام global
داخل الدالة، سيتم إنشاء متغير محلي جديد بنفس الاسم داخل الدالة، ولن يتم تعديل المتغير العام. مثال:
x = 10
def try_to_modify_x(): x = 20 # إنشاء متغير محلي x داخل الدالة
try_to_modify_x()
print(x) # طباعة 10 (لم يتغير المتغير العام)
مزايا استخدام المتغيرات العامة:
- سهولة الوصول: توفر طريقة سهلة لمشاركة البيانات بين أجزاء مختلفة من البرنامج.
- تجنب تمرير المعاملات بشكل متكرر: في بعض الحالات، يمكن أن يقلل استخدام المتغيرات العامة من الحاجة إلى تمرير نفس البيانات كمعاملات للعديد من الدوال.
عيوب استخدام المتغيرات العامة:
- صعوبة تتبع التغييرات: قد يصبح من الصعب تتبع مكان وكيفية تعديل قيمة المتغير العام، خاصة في البرامج الكبيرة والمعقدة، مما يزيد من احتمالية حدوث أخطاء.
- زيادة احتمالية حدوث تداخل: قد يؤدي استخدام المتغيرات العامة إلى حدوث تداخل غير مقصود بين أجزاء مختلفة من البرنامج، حيث قد تقوم دالة بتعديل قيمة متغير عام بطريقة غير متوقعة تؤثر على عمل دوال أخرى.
- صعوبة إعادة استخدام الكود: الكود الذي يعتمد بشكل كبير على المتغيرات العامة يصبح أقل قابلية لإعادة الاستخدام في برامج أخرى، حيث يعتمد على حالة البرنامج بشكل عام.
نصيحة: يُفضل عمومًا استخدام المتغيرات المحلية وتمرير البيانات كمعاملات للدوال قدر الإمكان، وذلك لتجنب المشاكل المحتملة المرتبطة بالمتغيرات العامة. استخدم المتغيرات العامة بحذر وعند الضرورة فقط، وحاول تقليل استخدامها قدر الإمكان.
مثال يوضح الفرق بين المتغير العام والمحلي:
def outer_function(): outer_var = "خارجي" # متغير محلي للدالة الخارجية
def inner_function(): inner_var = "داخلي" # متغير محلي للدالة الداخلية print(inner_var) # طباعة "داخلي" print(outer_var) # الوصول إلى المتغير المحلي للدالة الخارجية وطباعة "خارجي"
inner_function()
# print(inner_var) # خطأ: المتغير inner_var غير معرف هنا (خارج نطاق الدالة الداخلية)
outer_function()
في هذا المثال، outer_var
هو متغير محلي للدالة outer_function
، و inner_var
هو متغير محلي للدالة inner_function
. لا يمكن الوصول إلى inner_var
من خارج الدالة inner_function
. بينما يمكن للدالة الداخلية الوصول إلى المتغيرات المحلية للدالة الخارجية.
باختصار، المتغيرات العامة توفر سهولة الوصول ولكنها تحمل معها بعض المخاطر المحتملة. من المهم فهم كيفية عملها واستخدامها بحذر.