Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Mencegah Kelakuan Tidak Dijangka dengan Parameter Lalai Boleh Berubah dalam Python?

Bagaimanakah Saya Boleh Mencegah Kelakuan Tidak Dijangka dengan Parameter Lalai Boleh Berubah dalam Python?

Linda Hamilton
Lepaskan: 2024-12-16 09:57:18
asal
674 orang telah melayarinya

How Can I Prevent Unexpected Behavior with Mutable Default Parameters in Python?

Mengurus Parameter Lalai untuk Mengelakkan Mutasi Yang Tidak Diinginkan

Dalam Python, parameter lalai kadangkala boleh membawa kepada tingkah laku yang tidak dijangka apabila ia objek boleh ubah. Sebagai contoh, menggunakan senarai kosong sebagai parameter lalai fungsi boleh menyebabkan senarai "mengingat" data lama yang ditambahkan padanya dalam panggilan sebelumnya.

Pertimbangkan fungsi berikut:

def my_func(working_list=[]):
    working_list.append("a")
    print(working_list)
Salin selepas log masuk

Apabila dipanggil kali pertama, senarai lalai dibuat dan "a" dilampirkan. Walau bagaimanapun, panggilan seterusnya ke fungsi terus mengemas kini senarai yang sama, mengakibatkan tingkah laku yang tidak diingini. Untuk menangani isu ini, kita mesti memastikan bahawa senarai kosong baharu digunakan setiap kali fungsi dipanggil.

Satu pendekatan adalah untuk menetapkan parameter lalai secara eksplisit kepada Tiada dan menyemaknya dalam fungsi:

def my_func(working_list=None):
    if working_list is None: 
        working_list = []

    # alternative syntax:
    # working_list = [] if working_list is None else working_list

    working_list.append("a")
    print(working_list)
Salin selepas log masuk

Kaedah ini memastikan senarai kosong baharu dicipta apabila fungsi dipanggil tanpa hujah yang jelas.

Sebagai alternatif, anda boleh menggunakan pemahaman untuk mencipta senarai dan menetapkannya kepada parameter lalai:

def my_func(working_list=[[]]):
    working_list[0].append("a")
    print(working_list)
Salin selepas log masuk

Pendekatan ini juga berkesan menjana senarai kosong baharu pada setiap panggilan.

Dokumentasi Python mengesyorkan menggunakan None sebagai lalai parameter dan menyemaknya secara eksplisit. Perbandingan dengan Tiada harus dibuat menggunakan pengendali "adalah" atau "bukan", mengikut garis panduan PEP 8.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Kelakuan Tidak Dijangka dengan Parameter Lalai Boleh Berubah dalam Python?. 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