الوصول إلى المتغيرات غير المحلية في نطاقات الوظائف المتداخلة
في بايثون، توفر نطاقات الوظائف المتداخلة الوصول إلى النطاقات المضمنة. ومع ذلك، فإن محاولة تعديل متغير في نطاق مرفق داخل دالة متداخلة يمكن أن يؤدي إلى خطأ UnboundLocalError.
لمعالجة هذه المشكلة، لديك عدة خيارات:
1. استخدام الكلمة الأساسية "غير المحلية" (Python 3 ):
بالنسبة إلى Python 3 وما بعده، تسمح لك الكلمة الأساسية غير المحلية بإعادة ربط المتغيرات غير المحلية داخل الوظائف المتداخلة.
def outer():
ctr = 0
def inner():
nonlocal ctr
ctr = 1
inner()
2. الوصول غير المباشر عبر القوائم (بايثون 2 و3):
في كل من بايثون 2 و3، يمكنك استخدام قائمة للاحتفاظ بالمتغير وزيادته بشكل غير مباشر داخل الوظيفة المتداخلة.
ctr = [0]
def inner():
ctr[0] = 1
3. استخدام المتغيرات العامة (غير مستحسن):
على الرغم من أن استخدام المتغيرات العامة يمكن أن يسمح بالوصول إلى المتغيرات من النطاقات المتضمنة، إلا أنه لا يُنصح به بشكل عام بسبب التعارضات المحتملة ومشكلات إمكانية قراءة التعليمات البرمجية.
def outer():
global ctr
ctr = 0
def inner():
ctr = 1
يعتمد اختيار الحل المناسب على إصدار Python المحدد الخاص بك واعتبارات التصميم الخاصة بكودك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3