Ответ 1
Общая идея:
def func(arg1, arg2, ..., kwarg1=default, kwarg2=default, ..., *args, **kwargs):
...
Вы можете использовать столько, сколько хотите. *
и **
будут "впитывать" любые оставшиеся значения, которые иначе не учитывались.
Позиционные аргументы (предоставленные без по умолчанию) не могут быть заданы по ключевому слову, а аргументы, отличные от значения по умолчанию, не могут соответствовать аргументам по умолчанию.
Примечание. Python 3 также добавляет возможность указывать аргументы только для ключевого слова, имея их после *
:
def func(arg1, arg2, *args, kwonlyarg=default):
...
Вы также можете использовать только *
(def func(a1, a2, *, kw=d):
), что означает, что никакие аргументы не были захвачены, но все, что было после ключевого слова.
Итак, если вы в 3.x, вы можете создать поведение, которое хотите:
def myFun3(*, name, lname, **other_info):
...
Это позволит вызывать с name
и lname
только по ключевым словам.
Обратите внимание, что это необычный интерфейс, который может раздражать пользователя - я бы использовал его только в особых случаях использования.
В 2.x вам нужно вручную сделать это, проанализировав **kwargs
.