Python-future: Ganti lib2to3.fixes.fix_dict untuk menghindari panggilan list() yang tidak perlu

Dibuat pada 8 Sep 2017  ·  4Komentar  ·  Sumber: PythonCharmers/python-future

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.

0.21 enhancement

Komentar yang paling membantu

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

Semua 4 komentar

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?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat