Полагаю, я понимаю, как использовать их по отдельности в таких функциях, как ...
f (* args) или f (** kargs)
Но что, если функция принимает оба аргумента? Пример: f (* args, ** kargs)
Полагаю, я понимаю, как использовать их по отдельности в таких функциях, как ...
f (* args) или f (** kargs)
Но что, если функция принимает оба аргумента? Пример: f (* args, ** kargs)
Да, это работает
def f(*args, **kwargs):
pass
Если вы вызываете такую функцию f(1, 3, "foo", [1, 2, 10], a=1, apple=33)
, то в функции args
будет (1, 3, "foo", [1, 2, 10])
, kwargs
будет{'a': 1, 'apple': 33}
.
Это тоже будет работать
def f(a, b, foo, *args, **kwargs):
pass
Но если мы вызовем эту функцию с теми же аргументами, a
будет 1
, b
будет 3
, foo
будет "foo"
, args
будет ([1, 2, 10])
, kwargs
будет таким же.
*args
получает позиционные аргументы; **kwargs
получает именованные аргументы. Например:
f(1, 2, 3, a=1, b=2, c=3)
пройдет
args = (1, 2, 3)
kwargs = {a: 1, b: 2, c: 3}