القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس العشرون (كلمة بايثون المفتاحية global)

دورة البرمجة بلغة بايثون - الدرس العشرون (كلمة بايثون المفتاحية global)


دورة البرمجة بلغة بايثون - الدرس العشرون (كلمة بايثون المفتاحية global)
في هذه المقالة ، ستتعرف على الكلمة الرئيسية العالمية والمتغير العام ومتى تستخدم الكلمات الرئيسية العامة.


قبل قراءة هذه المقالة ، تأكد من حصولك على بعض أساسيات المتغيرات العالمية والمحلية وغير المحلية في بايثون.


ما هي الكلمة المفتاحية global

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


قواعد الكلمة المفتاحية global

  • عندما ننشئ متغيرًا داخل دالة ، فإنه يكون محليًا افتراضيًا.
  • عندما نحدد متغيرًا خارج الدالة ، فإنه يكون عامًا افتراضيًا. ليس عليك استخدام الكلمات الرئيسية global.
  • نستخدم الكلمة الأساسية global لقراءة وكتابة متغير عام داخل دالة.
  • استخدام الكلمات الأساسية global خارج دالة ليس له أي تأثير.

استخدام الكلمات الرئيسية global

لنأخذ مثالا.


مثال 1: الوصول إلى المتغير العام من داخل دالة

c = 1 # global variable

def add():
    print(c)

add()


عندما نقوم بتشغيل البرنامج أعلاه ، سيكون الناتج:

1


ومع ذلك ، قد يكون لدينا بعض السيناريوهات التي نحتاج فيها إلى تعديل المتغير العام من داخل دالة.


مثال 2: تعديل المتغير العام من داخل الدالة

c = 1 # global variable
    
def add():
    c = c + 2 # increment c by 2
    print(c)

add()


عندما نقوم بتشغيل البرنامج أعلاه ، يظهر الإخراج خطأ:

UnboundLocalError: local variable 'c' referenced before assignment

هذا لأنه يمكننا فقط الوصول إلى المتغير العام ولكن لا يمكننا تعديله من داخل الوظيفة.


الحل لهذا هو استخدام الكلمة الأساسية العامة.


مثال 3: تغيير المتغير العام من داخل دالة الدالة باستخدام الكلمة المفتاحية global

c = 0 # global variable

def add():
    global c
    c = c + 2 # increment by 2
    print("Inside add():", c)

add()
print("In main:", c)


عندما نقوم بتشغيل البرنامج أعلاه ، سيكون الناتج:

Inside add(): 2
In main: 2


في البرنامج أعلاه ، نحدد c ككلمة أساسية global داخل الدالة add.


ثم نزيد المتغير c بمقدار 1 ، أي c = c + 2. بعد ذلك نستدعي الدالة add. أخيرًا ، نقوم بطباعة المتغير العام c.


كما نرى ، حدث التغيير أيضًا في المتغير العام خارج الوظيفة ، c = 2.


المتغيرات العامة عبر وحدات بايثون

في بايثون ، نقوم بإنشاء config.py وحدة واحدة للاحتفاظ بالمتغيرات العامة ومشاركة المعلومات عبر وحدات بايثون داخل نفس البرنامج.


إليك كيف يمكننا مشاركة المتغيرات العامة عبر وحدات بيثون.


مثال 4: مشاركة متغير عام عبر وحدات بايثون النمطية

قم بإنشاء ملف config.py لتخزين المتغيرات العامة

a = 0
b = "empty"


قم بإنشاء ملف update.py لتغيير المتغيرات العامة

import config

config.a = 10
config.b = "alphabet"


قم بإنشاء ملف main.py لاختبار التغييرات في القيمة

import config
import update

print(config.a)
print(config.b)


عندما نقوم بتشغيل ملف main.py ، سيكون الناتج

10
alphabet


في ما سبق ، أنشأنا ثلاثة ملفات: config.py و update.py و main.py.


تخزن الوحدة config.py المتغيرات العامة لـ a و b. في ملف update.py ، نقوم باستيراد وحدة config.py وتعديل قيم a و b. وبالمثل ، في ملف main.py ، نستورد كلاً من config.py و update.py . أخيرًا ، نقوم بطباعة واختبار قيم المتغيرات العالمية سواء تم تغييرها أم لا.


المتغير العام في الوظائف المتداخلة

إليك كيفية استخدام متغير عام في دالة متداخلة.


مثال 5: استخدام متغير عام في دالة متداخلة

def foo():
    x = 20

    def bar():
        global x
        x = 25
    
    print("Before calling bar: ", x)
    print("Calling bar now")
    bar()
    print("After calling bar: ", x)

foo()
print("x in main: ", x)

الناتج هو:

Before calling bar: 20
Calling bar now
After calling bar: 20
x in main: 25

في البرنامج أعلاه ، أعلنا عن متغير عام داخل الدالة المتداخلة bar. داخل دالة foo ، لا تؤثر x على الكلمة الأساسية global.


قبل وبعد استدعاء bar () ، يأخذ المتغير x قيمة المتغير المحلي أي x = 20. خارج الدالة foo ، سيأخذ المتغير x القيمة المحددة في دالة bar أي x = 25. هذا هو لأننا استخدمنا الكلمة الأساسية global في x لإنشاء متغير عام داخل وظيفة bar (النطاق المحلي).


إذا أجرينا أي تغييرات داخل دالة bar ، فستظهر التغييرات خارج النطاق المحلي ، أي دالة foo.



reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات