Kako koristiti i zabilježiti zadane argumente u Python funkcijama

Poslovanje

Postavljanje zadanog argumenta u definiciji Python funkcije uzrokuje korištenje zadane vrijednosti ako se argument izostavi tijekom poziva funkcije.

Sljedeći detalji su opisani u nastavku.

  • Postavljanje zadanih argumenata
  • Ograničenja položaja zadanih argumenata
  • Imajte na umu da kada se kao zadana vrijednost koristi popis ili rječnik

Postavljanje zadanih argumenata

Ako je naziv argumenta = zadana vrijednost u definiciji funkcije, zadana vrijednost će se koristiti kada se odgovarajući argument izostavi.

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

Ograničenja položaja zadanih argumenata

Postavljanje zadanog argumenta ispred normalnog argumenta (argumenta za koji nije navedena zadana vrijednost) prilikom definiranja funkcije rezultira pogreškom.
SyntaxError

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

# SyntaxError: non-default argument follows default argument

Imajte na umu da kada se kao zadana vrijednost koristi popis ili rječnik

Ako je objekt koji se može ažurirati (promjenjivi) kao što je popis ili rječnik naveden kao zadana vrijednost, taj će se objekt kreirati kada je funkcija definirana. Zatim, kada se funkcija pozove bez odgovarajućeg argumenta, koristi se isti objekt.

Zadane vrijednosti argumenata procjenjuju se s lijeva na desno kada se izvršava definicija funkcije. To znači da se zadani izraz argumenta evaluira samo jednom kada je funkcija definirana, a ista “izračunata” vrijednost se koristi za svaki poziv.
8.7. Function definitions — Python 3.10.2 Documentation

Tako, na primjer, ako je definirana funkcija koja uzima popis ili rječnik kao zadani argument i dodaje mu elemente, te se poziva više puta bez tog argumenta, elementi će se više puta dodavati istom objektu.

Primjer za popis.

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]

Primjer za rječnik.

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}

Novi objekt se kreira svaki put kada se funkcija pozove.

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]