لا يقوم استدعاء الدالة بتحديث المتغير العام
يستكشف هذا السؤال تحديًا برمجيًا حيث لا يكون المتغير العام، الذي تم تعيينه في البداية على أنه False، لا يتم تحديثه عند الإشارة إليه داخل إحدى الوظائف. على الرغم من تغيير الدالة لقيمة المتغير العام، تستمر حلقة البرنامج الرئيسي في التنفيذ، مما يؤدي إلى حلقة لا نهائية. يتطلب فهم هذه المشكلة الخوض في مفهوم مساحات الأسماء ونطاق المتغيرات.
مساحة الاسم والنطاق المتغير
في البرمجة، تقوم كل وظيفة ووحدة بإنشاء مساحة اسم خاصة بها. مساحة الاسم عبارة عن مجموعة من الأسماء (المتغيرات والوظائف وما إلى ذلك) المعروفة والتي يمكن الوصول إليها ضمن هذا النطاق. عندما يتم تعيين قيمة لمتغير داخل دالة، يتم إنشاء متغير جديد في مساحة اسم الوظيفة، حتى في حالة وجود متغير عام بنفس الاسم.استخدام المتغيرات العامة
في هذه الحالة، عند الإشارة إلى متغير عام يسمى "done" داخل الوظيفة، يتم إنشاء متغير محلي جديد يحمل نفس الاسم في مساحة اسم الوظيفة. هذا "تم" المحلي يختلف عن "تم" العالمي. تغيير "done" المحلي ليس له أي تأثير على المتغير العام.
للتغلب على هذا، يجب استخدام الكلمة الأساسية العامة للإشارة بشكل صريح إلى المتغير العام داخل الوظيفة. باستخدام "تم" العمومي، تخبر الوظيفة المترجم بالوصول إلى المتغير "تم" العمومي بدلاً من إنشاء متغير محلي جديد.
كود معدل
لإصلاح المشكلة ، يمكن تعديل الدالة على النحو التالي:
def function(): العالمية تم للحلقة: شفرة إذا لم تمتثل: Done = Truedef function():
global done
for loop:
code
if not comply:
done = True
شرحيؤدي استخدام do العالمي إلى إنشاء اتصال بين المتغير المستخدم داخل الوظيفة والمتغير العام. عندما تقوم الدالة بتعديل قيمة تم، فإنها تقوم بتحديث نفس المتغير العام الذي تمت الإشارة إليه في البداية. وهذا يضمن أن حلقة البرنامج الرئيسي ستنتهي على النحو المنشود عندما يتم ضبط الوظيفة على True.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3