Cum să folosiți și să notați argumentele implicite în funcțiile Python

Afaceri

Setarea unui argument implicit într-o definiție de funcție Python face ca valoarea implicită să fie utilizată în cazul în care argumentul este omis în timpul unui apel de funcție.

Următoarele detalii sunt descrise mai jos.

  • Setarea argumentelor implicite
  • Constrângeri privind poziția argumentelor implicite
  • Rețineți că atunci când se utilizează o listă sau un dicționar ca valoare implicită

Setarea argumentelor implicite

Dacă numele argumentului = valoare implicită în definiția funcției, valoarea implicită va fi utilizată atunci când argumentul corespunzător este omis.

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

Constrângeri privind poziția argumentelor implicite

Plasarea unui argument implicit înaintea unui argument normal (un argument pentru care nu este specificată nicio valoare implicită) la definirea unei funcții generează o eroare.
SyntaxError

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

# SyntaxError: non-default argument follows default argument

Rețineți că atunci când se utilizează o listă sau un dicționar ca valoare implicită

În cazul în care se specifică un obiect actualizabil (mutabil), cum ar fi o listă sau un dicționar, ca valoare implicită, obiectul respectiv va fi creat atunci când funcția este definită. Apoi, atunci când funcția este apelată fără argumentul corespunzător, se utilizează același obiect.

Valorile implicite ale argumentelor sunt evaluate de la stânga la dreapta atunci când se execută definiția funcției. Aceasta înseamnă că expresia argumentului implicit este evaluată o singură dată la definirea funcției, iar la fiecare apel se utilizează aceeași valoare „calculată”.
8.7. Function definitions — Python 3.10.2 Documentation

Astfel, de exemplu, dacă se definește o funcție care primește ca argument implicit o listă sau un dicționar și adaugă elemente la acesta și este apelată de mai multe ori fără acest argument, elementele vor fi adăugate în mod repetat la același obiect.

Exemplu pentru o listă.

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]

Exemplu pentru un dicționar.

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}

Un nou obiect este creat de fiecare dată când funcția este apelată.

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]
Copied title and URL