Ponieważ python 3.8 wprowadził tylko argumenty pozycyjne, ten post wymaga aktualizacji.
Argumenty pozycyjne, argumenty słów kluczowych, argumenty wymagane i argumenty opcjonalne są często mylone. Argumenty pozycyjne NIE SĄ TAKIE SAME JAK argumenty wymagane. i słowa kluczowe argumenty NIE SĄ TAKIE SAME JAK argumenty opcjonalne.
Argumenty pozycyjne to argumenty, które można wywołać na podstawie ich pozycji w definicji funkcji.
Argumenty słów kluczowych to argumenty, które można wywołać za pomocą nazwy.
Argumenty wymagane to argumenty, które należy przekazać do funkcji.
Argumenty opcjonalne to argumenty, których nie można przekazać do funkcji. W Pythonie opcjonalne argumenty to argumenty, które mają wartość domyślną .
Argument pozycyjny, który jest opcjonalny (Python 3.8)
def f(a=2, /):
pass
f()
f(1)
f(a=1)
Wymagany argument pozycyjny (Python 3.8)
def f(a, /):
pass
f()
f(1)
f(a=1)
Argument słowa kluczowego, który jest opcjonalny
def f(*, a=1):
pass
f()
f(1)
f(a=1)
argument słowa kluczowego, który jest wymagany
def f(*, a)
pass
f() # Error, argument required
f(1) # Error, keyword only arguments
f(a=1) # Allowed, it's a keyword argument
Argument pozycyjny i słowo kluczowe, który jest opcjonalny
def f(a=1)
pass
f() # Allowed, argument is optional
f(1) # Allowed, it's a positional argument
f(a=1) # Allowed, it's a keyword argument
# In fact this function is the same as
def f(*, a=1, /):
pass
Wymagany argument pozycyjny i słowo kluczowe
def f(a):
pass
f()
f(1)
f(a=1)
def f(*, a, /):
pass
Podsumowując, argument może być opcjonalny lub wymagany, a nie oba jednocześnie . Może być również pozycyjny, kluczowy lub oba jednocześnie .
Python 3.8 wprowadził parametry tylko pozycyjne .
def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument):
pass