تلعب المتغيرات في بايثون دورًا رئيسيًا في تخزين البيانات وإدارتها. يعتمد سلوكهم وإمكانية الوصول إليهم على المكان الذي تم تعريفهم فيه في البرنامج. سنستكشف في هذه المقالة كيفية عمل المتغيرات العالمية والمحلية والسيناريوهات الشائعة مع الأمثلة.
المتغيرات المحلية
يتم إنشاء المتغيرات المحلية داخل الدالة وتكون موجودة فقط أثناء تنفيذها. ولا يمكن الوصول إليها من خارج الوظيفة.
استبدال السلسلة في جافا
مثال 1: في هذا الكود نقوم بإنشاء والوصول إلى متغير محلي داخل الدالة.
Pythondef greet(): msg = 'Hello from inside the function!' print(msg) greet()
الإخراج
Hello from inside the function!
توضيح: نحن نحدد تحية () مع المتغير المحلي رسالة وطباعته. وبما أن msg موجود فقط أثناء تنفيذ الوظيفة، فيمكن الوصول إليه داخل الوظيفة. الاتصال تحية () يعرض الرسالة.
مثال 2 : في هذا المثال نقوم بإنشاء متغير محلي داخل دالة ثم نحاول الوصول إليه خارج الدالة مما يسبب خطأ.
Python
def greet(): msg = 'Hello!' print('Inside function:' msg) greet() print('Outside function:' msg)
الإخراج
التتبع (آخر مكالمة أخيرة):
ملف '/home/guest/sandbox/Solution.py' سطر 6 بوصة
طباعة ("الوظيفة الخارجية:" رسالة)
خطأ في الاسم: لم يتم تعريف الاسم "msg".
التوضيح: رسالة هو متغير محلي في الداخل تحية () ولا يمكن الوصول إليها إلا هناك. تؤدي طباعته بالخارج إلى حدوث خطأ لأنه غير موجود عالميًا.
المتغيرات العالمية
يتم الإعلان عن المتغيرات العامة خارج جميع الوظائف ويمكن الوصول إليها في أي مكان في البرنامج بما في ذلك الوظائف الداخلية.
في هذا المثال، نقوم بإنشاء متغير عام ومن ثم الوصول إليه داخل الدالة وخارجها.
Pythonmsg = 'Python is awesome!' def display(): print('Inside function:' msg) display() print('Outside function:' msg)
الإخراج
Inside function: Python is awesome! Outside function: Python is awesome!
التوضيح: رسالة هو متغير عالمي يمكن الوصول إليه داخل وخارج عرض() وظيفة. الاتصال عرض() يطبع العالمية رسالة والطباعة رسالة خارج الدالة يعمل كما هو متوقع.
ملحوظة: إذا لم يتم العثور على متغير داخل دالة (النطاق المحلي)، فإن بايثون تبحث عنه تلقائيًا في النطاق العام. ومع ذلك، إذا كان للمتغير المحلي نفس اسم المتغير العام، فسوف يظل المتغير العام داخل تلك الوظيفة.
استخدام المتغيرات المحلية والعالمية
إذا تم تعريف متغير عالميًا ومحليًا بنفس الاسم، فإن المتغير المحلي يظلل المتغير العام داخل الوظيفة. لا تؤثر التغييرات التي يتم إجراؤها على المتغير المحلي على المتغير العام إلا إذا قمت بتعريف المتغير بشكل عام على أنه عالمي.
Pythondef fun(): s = 'Me too.' print(s) s = 'I love Geeksforgeeks' fun() print(s)
الإخراج
Me too. I love Geeksforgeeks
توضيح: داخل هزار() ق هو متغير محلي تم تعيينه على "أنا أيضًا". ويطبع تلك القيمة. خارج العالمية ق تظل عبارة "أنا أحب Geeksforgeeks" مطبوعة جدًا ق بعد ذلك يظهر القيمة العالمية.
تعديل المتغيرات العالمية داخل دالة
بشكل افتراضي، لا يمكن تعديل متغير عام داخل دالة دون الإعلان عنه على أنه عالمي. إذا قمت بتجربة Python فسوف يظهر خطأ لأنه يتعامل مع المتغير على أنه محلي. لتعديل متغير عام استخدم الكلمة الرئيسية العالمية .
بدون عالمي (يسبب خطأ)
Pythondef fun(): s += ' GFG' # Error: Python thinks s is local print(s) s = 'I love GeeksforGeeks' fun()
الإخراج
UnboundLocalError: تمت الإشارة إلى المتغير المحلي قبل التعيين
توضيح: داخل fun() تفترض Python أن s محلي لأننا نحاول تعديله. ولكن لا يوجد أي s محلي قبل هذا السطر لذلك يحدث خطأ.
مع العالمية (يعمل بشكل صحيح)
Pythons = 'Python is great!' def fun(): global s s += ' GFG' # Modify global variable print(s) s = 'Look for GeeksforGeeks Python Section' # Reassign global print(s) fun() print(s)
الإخراج
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section
توضيح:
- إن إعلان s على أنه عالمي يخبر بايثون باستخدام المتغير من النطاق العالمي.
- تقوم الوظيفة أولاً بإلحاق "GFG" ثم تقوم بإعادة تعيين s.
- تستمر التغييرات خارج الوظيفة.
العالمي مقابل المحلي بنفس الاسم
Pythona = 1 # Global variable def f(): print('f():' a) # Uses global a def g(): a = 2 # Local shadows global print('g():' a) def h(): global a a = 3 # Modifies global a print('h():' a) print('global:' a) f() print('global:' a) g() print('global:' a) h() print('global:' a)
الإخراج
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3
توضيح:
- تقوم الدالة f() بطباعة a عالمي دون تغييره.
- g() ينشئ محليًا ويترك واحدًا عالميًا دون تغيير.
- تعلن h() عن أنها عالمية وتقوم بتعديلها.
المتغير المحلي مقابل المتغير العالمي
| أساس المقارنة | المتغير العالمي | المتغير المحلي |
|---|---|---|
| تعريف | أعلن خارج الوظائف | أعلن داخل وظائف |
| حياة | يتم إنشاؤها عند بدء تشغيل البرنامج وتدميرها عند انتهائها | يتم إنشاؤها عند استدعاء الوظيفة وتدميرها عند عودتها |
| مشاركة البيانات | مشتركة عبر جميع الوظائف | غير مشترك؛ موجود فقط ضمن وظيفتها |
| نِطَاق | يمكن الوصول إليها في أي مكان في البرنامج | يمكن الوصول إليها فقط داخل الوظيفة |
| المعلمات اللازمة | لا حاجة لتمرير المعلمة | يمكن إنشاؤها من خلال المعلمات أو المهام داخل الوظيفة |
| تخزين | تتم إدارتها في مساحة الاسم العامة (وليس موقع الذاكرة الثابتة) | مخزنة في مساحة الاسم المحلية للوظيفة (إطار المكدس) |
| قيمة | التغييرات تؤثر على البرنامج بأكمله | التغييرات محلية ولا تؤثر على الوظائف الأخرى |