Kako uporabiti in zapisati privzete argumente v funkcijah Python

Posel

Nastavitev privzetega argumenta v definiciji funkcije Python povzroči, da se privzeta vrednost uporabi, če je argument med klicem funkcije izpuščen.

V nadaljevanju so opisane naslednje podrobnosti.

  • Nastavitev privzetih argumentov
  • Omejitve položaja privzetih argumentov
  • Upoštevajte, da če je kot privzeta vrednost uporabljen seznam ali slovar

Nastavitev privzetih argumentov

Če je v definiciji funkcije ime argumenta = privzeta vrednost, se ob izpustitvi ustreznega argumenta uporabi privzeta vrednost.

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

Omejitve položaja privzetih argumentov

Če pri definiranju funkcije postavite privzeti argument pred običajni argument (argument, za katerega ni določena privzeta vrednost), pride do napake.
SyntaxError

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

# SyntaxError: non-default argument follows default argument

Upoštevajte, da če je kot privzeta vrednost uporabljen seznam ali slovar

Če je kot privzeta vrednost določen objekt, ki ga je mogoče posodabljati (spreminjati), na primer seznam ali slovar, bo ta objekt ustvarjen, ko bo funkcija definirana. Ko se funkcija pokliče brez ustreznega argumenta, se uporabi isti objekt.

Privzete vrednosti argumentov se ob izvajanju definicije funkcije ovrednotijo od leve proti desni. To pomeni, da se izraz privzetega argumenta ob definiranju funkcije ovrednoti samo enkrat, pri vsakem klicu pa se uporabi ista “izračunana” vrednost.
8.7. Function definitions — Python 3.10.2 Documentation

Če je na primer opredeljena funkcija, ki kot privzeti argument sprejme seznam ali slovar in vanj doda elemente, in je večkrat poklicana brez tega argumenta, bodo elementi večkrat dodani istemu objektu.

Primer za seznam.

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]

Primer za slovar.

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}

Ob vsakem klicu funkcije se ustvari nov predmet.

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]