Nie jest to jako taki operator, więc tak naprawdę nie ma nazwy, ale jest zdefiniowany jako „reguła składniowa” . Więc powinno się to nazywać:
- „Składnia rozpakowywania argumentu słowa kluczowego”
Jeśli masz listę argumentów *args
, to się nazywa „rozpakowanie argument” , w taki sam sposób **kwargs
nazywany jest „argumentem kluczowe rozpakowaniu” .
Jeśli użyjesz go po lewej stronie =
, jak w a, *middle, end = my_tuple
, powiesz „rozpakowanie krotki” .
W sumie istnieją trzy typy argumentów (jednoparametrowych):
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
*args
Argumentem nazywany jest „zmienny parametr pozycyjny” i **kwargs
jest „zmienny parametr słowo kluczowe”. Argumenty zawierające tylko słowa kluczowe nie mogą być podawane pozycyjnie, ponieważ zmienny parametr pozycyjny przyjmuje wszystkie przekazywane argumenty.
Większość z nich można znaleźć w dokumentach PEP 0362 i 3102 , a także w sekcji kontroli przepływu dokumentów. Należy jednak zauważyć, że obiekt podpisu funkcji PEP to tylko szkic, a terminologia może być tylko pomysłem jednej osoby. Ale i tak są to dobre warunki. :)
Zatem argumenty *
i **
po prostu rozpakowują swoje odpowiednie struktury danych:
args = (1, 2, 3) # usually a tuple, always an iterable[1]
f(*args) → f(1, 2, 3)
# and
kwargs = {"a": 1, "b": 2, "c": 3} # usually a dict, always a mapping*
f(**kwargs) -> f(a=1, b=2, c=3)
[1]: Iterables to obiekty, które implementują __iter__()
metodę, a mapowania to obiekty, które implementują keys()
i __getitem__()
. Każdy obiekt, który obsługuje protokół ten należy rozumieć przez konstruktorów tuple()
i dict()
, dlatego mogą być stosowane do rozpakowywania argumentów.