"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا يقوم استدعاء الوظيفة بتحديث المتغير العام؟

لماذا لا يقوم استدعاء الوظيفة بتحديث المتغير العام؟

تم النشر بتاريخ 2024-11-01
تصفح:564

Why Does Function Call Not Update Global Variable?

لا يقوم استدعاء الدالة بتحديث المتغير العام

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

مساحة الاسم والنطاق المتغير

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

استخدام المتغيرات العامة

في هذه الحالة، عند الإشارة إلى متغير عام يسمى "done" داخل الوظيفة، يتم إنشاء متغير محلي جديد يحمل نفس الاسم في مساحة اسم الوظيفة. هذا "تم" المحلي يختلف عن "تم" العالمي. تغيير "done" المحلي ليس له أي تأثير على المتغير العام.

للتغلب على هذا، يجب استخدام الكلمة الأساسية العامة للإشارة بشكل صريح إلى المتغير العام داخل الوظيفة. باستخدام "تم" العمومي، تخبر الوظيفة المترجم بالوصول إلى المتغير "تم" العمومي بدلاً من إنشاء متغير محلي جديد.

كود معدل

لإصلاح المشكلة ، يمكن تعديل الدالة على النحو التالي:

def function(): العالمية تم للحلقة: شفرة إذا لم تمتثل: Done = True
def function():
    global done
    for loop:
        code
        if not comply:
            done = True
شرح

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

بيان الافراج أعيد طبع هذه المقالة على: 1729310358 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3