В вашем коде numbers
назначен (1,2,3) кортеж.keywords
назначается словарь, содержащий vegetables
и fruits
.
Одна звезда (*
) определяет позиционные аргументы.Это означает, что вы можете получить любое количество аргументов.Переданные аргументы можно рассматривать как кортеж.
Две звезды (**
) определяют ключевые слова аргументов.
Справочный материал доступен здесь .
Примеры
Python 2.x (без аргументов только для ключевых слов)
def foo(x, y, foo=None, *args): print [x, y, foo, args]
foo(1, 2, 3, 4) --> [1, 2, 3, (4, )] # foo == 4
foo(1, 2, 3, 4, foo=True) --> TypeError
Python 3.x (с аргументами только для ключевых слов)
def foo(x, y, *args, foo=None): print([x, y, foo, args])
foo(1, 2, 3, 4) --> [1, 2, None, (3, 4)] # foo is None
foo(1, 2, 3, 4, foo=True) --> [1, 2, True, (3, 4)]
def combo(x=None, *args, y=None): ... # 2.x and 3.x styles in one function
Хотяопытный программист понимает, что произошло в 2.x, это нелогично (позиционный аргумент привязывается к foo=
независимо от аргументов ключевого слова, если имеется достаточно позиционных аргументов)
Python 3.x представляет большеинтуитивно понятные аргументы только для ключевых слов с PEP-3102 (аргументы ключевых слов после varargs могут быть связаны только по имени)