Com utilitzar i anotar els arguments predeterminats a les funcions de Python

Negocis

L’establiment d’un argument predeterminat en una definició de funció de Python fa que s’utilitzi el valor predeterminat si s’omet l’argument durant una trucada de funció.

A continuació es descriuen els detalls següents.

  • Configuració d’arguments per defecte
  • Restriccions a la posició dels arguments per defecte
  • Tingueu en compte que quan s’utilitza una llista o un diccionari com a valor predeterminat

Configuració d’arguments per defecte

Si nom de l’argument = valor per defecte a la definició de la funció, el valor per defecte s’utilitzarà quan s’omet l’argument corresponent.

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

Restriccions a la posició dels arguments per defecte

Col·locar un argument per defecte abans d’un argument normal (un argument per al qual no s’especifica cap valor per defecte) quan es defineix una funció provoca un error.
SyntaxError

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

# SyntaxError: non-default argument follows default argument

Tingueu en compte que quan s’utilitza una llista o un diccionari com a valor predeterminat

Si s’especifica un objecte actualitzable (mutable) com una llista o un diccionari com a valor predeterminat, aquest objecte es crearà quan es definisca la funció. Aleshores, quan es crida la funció sense l’argument corresponent, s’utilitza el mateix objecte.

Els valors dels arguments per defecte s’avaluen d’esquerra a dreta quan s’executa la definició de la funció. Això vol dir que l’expressió d’argument predeterminada només s’avalua una vegada quan es defineix la funció i s’utilitza el mateix valor “calculat” per a cada trucada.
8.7. Function definitions — Python 3.10.2 Documentation

Així, per exemple, si es defineix una funció que pren una llista o un diccionari com a argument per defecte i hi afegeix elements, i s’anomena diverses vegades sense aquest argument, s’afegiran elements al mateix objecte repetidament.

Exemple d’un llistat.

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]

Exemple per a un diccionari.

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}

Es crea un objecte nou cada cop que es crida la funció.

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