args* / kwargs**

Når vi definerer en funktion, plejer vi ofte at kende hvor mange argumenter, vi vil skrive i den.

Der findes funktioner helt uden argumenter. Fx:

def hej():
    print("Hej")

Og så findes der funktioner med et argument:

def hej_v2(navn):
    print("Hej", navn)

Men hvis vi er i tvivl om, hvor mange argumenter en funktioner skal have, kan vi benytte den såkaldte arbitrære metoder, hvor vi bruger et wild card(*). Disse kalder vi for *args og **kwargs.

Bruger vi *args kan vi skrive lige så mange strenge og tal som vi har lyst til.

Bruger vi derimod **kwargs, har vi at gøre med mapping, hvor vi kan skrive key words og values. Fx a = “Pythons”, hvor a er vores key, mens Pythons er value. Husk at sætte to stjerner i parentesen. Ellers forstår Python os ikke.

Vi kan også bruge både argumenter, *args og **kwargs i samme funktion.

# args og kwargs

# args
def info(*args):
    print("args:", args)
    print("Hej {1} {0} {2} {3} {4}".format(*args))

info(9, "A", "bc", 38, "def")

# kwargs
def info_v2(**kwargs):
    resultat = ""
    for variabel in kwargs.values():
        resultat += variabel
    return resultat

x = info_v2(a="abc", b="def", c="ghi", d="jkl", e="mno")
print(x)

# argumenter, args og kwargs
def info_v3(x, y, *args, **kwargs):
    print("x:", x)
    print("y:", y)
    print("args:", *args)
    print("kwargs keys: {}:".format(kwargs.keys()))
    print("kwargs values: {}:".format(kwargs.values()))
info_v3("a", "b", "hej med", a="https", b="://", c=".org")