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