Seorang pembangun Python telah mengeluarkan pakej kontroversi yang dipanggil dict-unpacking-at-home yang membolehkan dictionary unpacking gaya JavaScript dalam Python melalui hack encoding fail yang luar biasa. Pakej ini telah mencetuskan perdebatan sengit dalam komuniti mengenai ciri-ciri Python yang hilang dan penyelesaian kreatif.
Penggunaan Kreatif Sistem Encoding Python
Pakej ini berfungsi dengan mendaftarkan format encoding fail tersuai yang memproses kod sumber Python sebelum pelaksanaan. Pengguna menambah komen khas # -*- coding: dict-unpacking-at-home -*-
ke dalam fail mereka, yang mencetuskan transformasi. Ini membolehkan sintaks seperti {greeting, thing} = dct
untuk mengekstrak nilai dictionary terus ke dalam pembolehubah, serupa dengan destructuring assignment JavaScript.
Pelaksanaan ini mewakili penyalahgunaan bijak sistem encoding teks Python, yang biasanya mengendalikan penukaran aksara seperti UTF-8. Daripada menukar antara encoding aksara, pakej ini mengubah struktur kod sumber sebenar sebelum parser Python melihatnya.
File encoding: Sistem Python untuk menukar data byte kepada aksara teks yang boleh difahami oleh interpreter
Langkah-langkah Pemasangan Pakej:
- Pasang melalui
pip install dict-unpacking-at-home
- Tambah
-*- coding: dict-unpacking-at-home -*-
pada pengepala fail - Gunakan sintaks:
{greeting, thing} = dct
untuk pembongkaran
Reaksi Komuniti Berkisar dari Antusiasme hingga Kebimbangan
Komuniti Python telah menunjukkan reaksi bercampur-campur terhadap pakej eksperimental ini. Sesetengah pembangun menyatakan kekecewaan tulen dengan batasan semasa Python, dengan seorang ahli komuniti menyatakan mereka akan menderma 500 dolar Amerika Syarikat kepada Python Software Foundation jika ciri ini ditambah secara rasmi, memanggil kekurangan ini sebagai kesakitan harian.
Walau bagaimanapun, pengarang pakej secara eksplisit memberi amaran terhadap penggunaan produksi, merujuk pengalaman sebelumnya dengan pakej jenaka yang secara tidak dijangka menjadi infrastruktur kritikal. Pakej ini telah mengumpul hampir satu juta muat turun sebulan, menyerlahkan betapa cepatnya alat eksperimental boleh mendapat penerimaan meluas dalam ekosistem Python.
Penyelesaian Alternatif Python:
- Penyata match-case (PEP 636): Pemadanan corak untuk kamus
- Operator gabungan kamus (Python 3.9+):
new_dict = old_dict | update_dict
- Gabungan dalam tempat:
the_dict |= update_dict
- Pembukaan kamus:
new_dict = {**old_dict,**updates}
Batasan Teknikal dan Alternatif
Pelaksanaan semasa mempunyai kelemahan ketara, termasuk nombor baris yang rosak dalam mesej ralat, yang merumitkan penyahpepijatan. Walaupun pembetulan wujud, ia datang dengan kos prestasi tambahan yang menjadikan penyelesaian ini lebih tidak praktikal untuk kegunaan dunia sebenar.
Ahli komuniti telah menunjukkan alternatif sedia ada dalam ciri standard Python. Penyata match-case yang lebih baharu yang diperkenalkan dalam PEP 636 menyediakan keupayaan unpacking serupa untuk dictionary dengan cara yang lebih berstruktur. Selain itu, sintaks penggabungan dictionary sedia ada Python menggunakan operator union (|
) dalam Python 3.9+ menawarkan penyelesaian yang lebih bersih untuk banyak tugas manipulasi dictionary biasa.
Pakej ini menunjukkan kedua-dua kreativiti pembangun Python dan keinginan berterusan untuk sintaks pengendalian dictionary yang lebih mudah dalam bahasa tersebut. Walaupun tidak sesuai untuk kegunaan produksi, ia berfungsi sebagai bukti konsep yang menarik untuk ciri bahasa masa depan yang berpotensi.
PEP 636: Python Enhancement Proposal yang memperkenalkan pattern matching dengan penyata match-case
Rujukan: dict-unpacking-at-home