Cara menggunakan dan perhatikan hujah lalai dalam fungsi Python

Perniagaan

Menetapkan hujah lalai dalam definisi fungsi Python menyebabkan nilai lalai digunakan jika hujah ditinggalkan semasa panggilan fungsi.

Butiran berikut diterangkan di bawah.

  • Menetapkan Argumen Lalai
  • Kekangan pada kedudukan argumen lalai
  • Ambil perhatian bahawa apabila senarai atau kamus digunakan sebagai nilai lalai

Menetapkan Argumen Lalai

Jika nama argumen = nilai lalai dalam definisi fungsi, nilai lalai akan digunakan apabila argumen yang sepadan ditinggalkan.

def func_default(arg1, arg2='default_x', arg3='default_y'):
    print(arg1)
    print(arg2)
    print(arg3)

func_default('a')
# a
# default_x
# default_y

func_default('a', 'b')
# a
# b
# default_y

func_default('a', arg3='c')
# a
# default_x
# c

Kekangan pada kedudukan argumen lalai

Meletakkan hujah lalai sebelum hujah biasa (hujah yang tiada nilai lalai ditentukan) apabila mentakrifkan fungsi mengakibatkan ralat.
SyntaxError

# def func_default_error(arg2='default_a', arg3='default_b', arg1):
#     print(arg1)
#     print(arg2)

# SyntaxError: non-default argument follows default argument

Ambil perhatian bahawa apabila senarai atau kamus digunakan sebagai nilai lalai

Jika objek boleh dikemas kini (boleh berubah) seperti senarai atau kamus ditentukan sebagai nilai lalai, objek itu akan dibuat apabila fungsi itu ditakrifkan. Kemudian, apabila fungsi dipanggil tanpa hujah yang sepadan, objek yang sama digunakan.

Nilai hujah lalai dinilai dari kiri ke kanan apabila definisi fungsi dilaksanakan. Ini bermakna ungkapan hujah lalai dinilai hanya sekali apabila fungsi ditakrifkan dan nilai “dikira” yang sama digunakan untuk setiap panggilan.
8.7. Function definitions — Python 3.10.2 Documentation

Oleh itu, sebagai contoh, jika fungsi ditakrifkan yang mengambil senarai atau kamus sebagai hujah lalainya dan menambahkan elemen padanya, dan dipanggil berbilang kali tanpa hujah itu, elemen akan ditambahkan pada objek yang sama berulang kali.

Contoh untuk penyenaraian.

def func_default_list(l=[0, 1, 2], v=3):
    l.append(v)
    print(l)

func_default_list([0, 0, 0], 100)
# [0, 0, 0, 100]

func_default_list()
# [0, 1, 2, 3]

func_default_list()
# [0, 1, 2, 3, 3]

func_default_list()
# [0, 1, 2, 3, 3, 3]

Contoh untuk kamus.

def func_default_dict(d={'default': 0}, k='new', v=100):
    d[k] = v
    print(d)

func_default_dict()
# {'default': 0, 'new': 100}

func_default_dict(k='new2', v=200)
# {'default': 0, 'new': 100, 'new2': 200}

Objek baru dicipta setiap kali fungsi dipanggil.

def func_default_list_none(l=None, v=3):
    if l is None:
        l = [0, 1, 2]
    l.append(v)
    print(l)

func_default_list_none()
# [0, 1, 2, 3]

func_default_list_none()
# [0, 1, 2, 3]