هل يمكن أن تحديث المتغيرات المحلية داخل دالة؟
The Python 3 معضلة
في Python 3 ، فشل مقتطف الكود التالي في تحديث متغير محلي كما قد يتوقع المرء: أ = 1 exec ("A = 3") print (a) بدلاً من "3" المتوقعة ، يطبع بشكل مثير للقلق '1'!
نفس الرمز في Python 2 من شأنه بالفعل تحديث المتغير المحلي ، الطباعة "3". ينشأ هذا التباين من تغيير أساسي في كيفية معالجة Python المتغيرات المحلية.
def f(): a = 1 exec("a = 3") print(a)في وقت الترجمة. تأتي هذه الكفاءة على حساب حظر تعديلات وقت التشغيل للسكان المحليين. وبالتالي ، لا يمكن لدعوة EXEC الافتراضية في Python 3 تغيير المتغيرات المحلية بنجاح.
سحر السكان المحليين () تمرير بشكل صريح من قاموس السكان المحليين إلى Exec. سيقوم هذا القاموس بتخزين المتغيرات المحلية المحدثة بعد تنفيذ الرمز الديناميكي. يشبه الرمز المنقح هذا: def foo (): ldict = {} exec ("a = 3" ، globals () ، ldict) a = ldict ['a'] print (a)
سلوك لا يمكن التنبؤ به. من أجل السلامة ، ينبغي للمرء دائمًا أن يمرر قاموسًا صريحًا للسكان المحليين إلى EXEC عندما يعتزم تحديث المتغيرات المحلية.
يبرز تقرير الأخطاء أن تحسين Python 3 للمتغيرات المحلية أدى إلى السلوك الحالي. لا يمكن للمترجم ، غير قادر على التمييز بين وظائف EXEC المخصصة عن Python ، أن يقدم لهم علاجًا خاصًا. وبالتالي ، لا يمكن لـ EXEC الافتراضي تغيير السكان المحليين. سمحت بتعديل المتغيرات المحلية ديناميكيًا بحكم المعالجة الخاصة للمترجم لـ Exec المدمج.
الاستنتاجتغيير في النهج لتعديل المتغيرات المحلية. من خلال توظيف قاموس السكان المحليين الصريح ، يمكن للمطورين الاستفادة من قوة تنفيذ التعليمات البرمجية الديناميكية مع الحفاظ على السيطرة على متغيراتهم المحلية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3