Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Argumen Lalai Boleh Berubah dalam Python Membawa kepada Gelagat Tidak Dijangka?

Mengapa Argumen Lalai Boleh Berubah dalam Python Membawa kepada Gelagat Tidak Dijangka?

Patricia Arquette
Lepaskan: 2024-12-22 21:54:13
asal
353 orang telah melayarinya

Why Do Mutable Default Arguments in Python Lead to Unexpected Behavior?

"Least Astonishment" dan Argumen Lalai Boleh Berubah

Tingkah laku yang tidak dijangka bagi fungsi foo dalam Python, di mana argumen lalai terikat pada definisi fungsi dan bukannya pelaksanaan, mempunyai membingungkan ramai. Malah ada yang menganggapnya sebagai kesilapan pengaturcaraan. Walau bagaimanapun, tingkah laku ini mempunyai rasional yang kukuh yang berakar umbi dalam sifat Python sebagai bahasa dengan fungsi kelas pertama.

Fungsi dalam Python bukan sekadar blok kod; ia adalah objek yang dinilai pada masa definisinya. Penilaian ini termasuk argumen lalai yang mengikat, yang bertindak sebagai "data ahli" untuk objek fungsi. Akibatnya, perubahan yang dibuat kepada argumen lalai berterusan merentas panggilan fungsi, sama seperti cara perubahan keadaan dalam mana-mana objek dikekalkan.

Untuk menggambarkan, pertimbangkan fungsi a yang mencetak mesej dan mengembalikan senarai kosong. Satu lagi fungsi b mengambil satu parameter x dengan nilai lalai a(). Apabila b dipanggil tanpa menyatakan x, ia mengikat x kepada hasil panggilan a, yang mengembalikan senarai kosong. Walau bagaimanapun, memandangkan senarai kosong disimpan sebagai hujah lalai dalam b, panggilan seterusnya kepada b akan ditambahkan pada senarai yang sama ini, menghasilkan tingkah laku yang diperhatikan di mana [5] dicetak pada panggilan pertama dan [5, 5] pada panggilan kedua .

Tingkah laku ini mengikut prinsip "paling tidak terkejut", yang menentukan bahawa kelakuan program harus sejajar dengan apa yang dijangkakan oleh pengaturcara secara munasabah. Dalam kes ini, sebaik sahaja objek fungsi ditakrifkan, argumen lalainya menjadi sebahagian daripada keadaannya dan sebarang pengubahsuaian pada hujah tersebut ditunjukkan dalam panggilan seterusnya.

Walaupun tingkah laku ini mungkin kelihatan berlawanan dengan intuitif bagi sesetengah pihak, ia adalah konsisten. dengan falsafah reka bentuk Python. Berfungsi sebagai objek kelas pertama membolehkan fleksibiliti yang lebih besar dan menggalakkan gaya pengaturcaraan yang lebih berorientasikan objek. Memahami konsep ini meningkatkan pemahaman pengaturcara tentang asas Python dan menggalakkan pembangunan kod yang lebih mantap dan berkesan.

Atas ialah kandungan terperinci Mengapa Argumen Lalai Boleh Berubah dalam Python Membawa kepada Gelagat Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan