"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل `exec ()` تحديث المتغيرات المحلية في Python 3 ، وإذا لم يكن الأمر كذلك ، كيف يمكن أن يكون لها؟

هل `exec ()` تحديث المتغيرات المحلية في Python 3 ، وإذا لم يكن الأمر كذلك ، كيف يمكن أن يكون لها؟

نشر في 2025-02-19
تصفح:814

Does `exec()` Update Local Variables in Python 3, and If Not, How Can It Be Made To?

هل يمكن أن تحديث المتغيرات المحلية داخل دالة؟

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