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
Linda Hamiltonasal
2024-12-16 09:57:18669semak imbas

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)

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)

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)

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!

Kenyataan:
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