سيقوم lib2to3.fixes.fix_dict
بشكل أساسي بإنهاء أي مكالمة إلى dict.keys()
أو .values()
أو .items()
في list()
بغض النظر عن سياقه.
ومع ذلك ، بقدر ما أستطيع أن أقول إن المكالمات غير مجدية إلى حد ما عندما يتم تكرار النتيجة مباشرة (على سبيل المثال for k, v in d.items()
) أو التحقق من الاحتواء (على سبيل المثال if a in d.keys()
) مما يؤدي إلى الكثير من الاختلافات الضوضاء للعودة.
سيكون لطيفًا إذا كان لدى Python-Future أداة إصلاح التكرار الخاصة بها لتجنب هذا الإزعاج.
قد يؤدي تكرار العروض أثناء إضافة أو حذف الإدخالات في القاموس إلى ظهور خطأ وقت التشغيل أو فشل في التكرار على جميع الإدخالات.
إذا كانت الحلقة الداخلية من for
تقوم بإضافة أو حذف الإدخالات ، فإن list()
مطلوب
لقد قمت بكتابة " fix_dict_methods
" الخاصة بي والتي تقوم بما يلي:
"""Fixer for some dict methods.
Imports these compatibility methods from `future.utils`.
d.iterkeys() -> iterkeys(d)
d.iteritems() -> iteritems(d)
d.itervalues() -> itervalues(d)
d.viewkeys() -> viewkeys(d)
d.viewitems() -> viewitems(d)
d.viewvalues() -> viewvalues(d)
"""
يجب أن يكون أكثر أمانًا لكود PY2 الذي يصبح مستقبليًا ببطء خطوة بخطوة.
لا يتم تغليف أي من مكالمات .keys/values/items()
البسيطة بـ list()
أيضًا ، نظرًا لأنني لم أجد العديد من النقاط التي نحتاج إلى إصلاحها حتى الآن ، ولكن قد أتابعها كخطوة منفصلة - أعتقد أنه يمكنني تشغيل fix_dict
العادي إذا كنت بحاجة إلى هذا التغيير.
اسمحوا لي أن أعرف ما إذا كان هناك اهتمام بهذا المتغير fix_dict
. أنا أيضًا على استعداد لتغيير اسمها. (ربما fix_dict_methods_with_import
؟)
مرحبًا rdrey ، أنا مهتم بهذا البديل. يبدو أنها فكرة جيدة لتشغيلها قبل fix_dict
العادي ، خاصةً إذا كانت قاعدة الكود تستدعي دائمًا إصدار iter
عندما تحتاج فقط إلى مكرر.
هل تمانع في مشاركتها؟
rkouye هنا تذهب: https://gist.github.com/rdrey/a307f46f7708b65421061374a14d60e9
التعليق الأكثر فائدة
إذا كانت الحلقة الداخلية من
for
تقوم بإضافة أو حذف الإدخالات ، فإنlist()
مطلوب