Ответ 1
В вашем коде 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 могут быть связаны только по имени)