Как работают args и kwargs вместе?

Есть функция:

def a(q, w=5, *args, **kwargs):
    print(q)
    print(w)
    print(args)
    print(kwarks)

вызываем функцию:

a(1,2,3,4,{1:2})

в q попадет 1, в w попадет 5, в args попадет все остальное.

Есть ли смысл в одну функцию помещать и аргзы и кваргзы?
Ведь в любом случае аргзы съедают все оставшиеся переменные.


Ответы (1 шт):

Автор решения: S. Nick
  • Используйте общепринятые конструкции *args и **kwargs для захвата позиционных и именованных аргументов.
  • Конструкцию **kwargs нельзя располагать до *args. Если это сделать — будет выдано сообщение об ошибке.
  • Остерегайтесь конфликтов между именованными параметрами и **kwargs, в случаях, когда значение планируется передать как **kwarg-аргумент, но имя ключа этого значения совпадает с именем именованного параметра.
  • Оператор *можно использовать не только в объявлениях функций, но и при их вызове.

#def a(q, w=5, *args, **kwargs):
def a(q, *args, w=5, **kwargs):
    print(f'args   = {args}')
    print(f'kwargs = {kwargs}\n')
    print(f'q   = {q}')
    print(f'w   = {w}')

    
a(1, 2, 3, 4, {1:2}, hello='world')    
→ Ссылка