lib2to3.fixes.fix_dict
pada dasarnya akan membungkus panggilan apa pun ke dict.keys()
, .values()
atau .items()
dalam list()
apa pun konteksnya.
Namun sejauh yang saya tahu, panggilan tersebut kurang lebih tidak ada gunanya ketika hasilnya diulang secara langsung (misalnya for k, v in d.items()
) atau diperiksa untuk penahanan (misalnya if a in d.keys()
) yang mengarah ke banyak perbedaan kebisingan untuk kembali.
Akan lebih baik jika python-future memiliki pemecah masalah dict-iteration sendiri untuk menghindari gangguan ini.
Mengulangi tampilan saat menambahkan atau menghapus entri dalam kamus dapat menimbulkan RuntimeError atau gagal mengulangi semua entri.
Jika bagian dalam loop for
menambahkan atau menghapus entri, maka list()
diperlukan
Saya telah menulis sendiri " fix_dict_methods
" yang melakukan ini:
"""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)
"""
Seharusnya lebih aman untuk kode PY2 yang perlahan-lahan menjadi futurisasi selangkah demi selangkah.
Itu juga tidak membungkus panggilan .keys/values/items()
di list()
, karena saya belum menemukan banyak tempat yang kami perlukan perbaikannya, tetapi saya mungkin akan menindaklanjutinya sebagai langkah terpisah - Saya pikir saya dapat menjalankan fix_dict
normal jika saya membutuhkan perubahan itu.
Beri tahu saya jika ada minat pada varian fix_dict
. Saya juga siap untuk mengubah namanya. (Mungkin fix_dict_methods_with_import
?)
Hai @rdrey , saya tertarik dengan varian ini. Kedengarannya seperti ide yang bagus untuk menjalankannya sebelum fix_dict
normal, terutama jika basis kode selalu memanggil versi iter
ketika hanya membutuhkan iterator.
Apakah Anda keberatan membagikannya?
@rkouye ini dia: https://Gist.github.com/rdrey/a307f46f7708b65421061374a14d60e9
Komentar yang paling membantu
Jika bagian dalam loop
for
menambahkan atau menghapus entri, makalist()
diperlukan