*args используется для неименованных аргументов, с которыми можно работать как со списком;
**kwargs используется для именованных аргументов, с которыми можно работать как со словарём;
Как пример:
def testFunc(param1, *param2, **param3):
print ('обычный параметр:',param1)
print ('Список параметров:',param2)
print ('Именованные параметры (ключ=значение)',param3)
print ('-'*40)
print ('Вывод списков параметров по одному значению в цикле:')
print ('Неименованные:')
for arg in param2:
print (arg)
print ('-'*40)
print ('Аргумент с индексом 1 = ', param2[1])
print ('-'*40)
print ('Именованные:')
for key, value in param3.items():
print (key, ':', value)
print ('Получение значения по ключу:')
print ('prop = ',param3.get('prop'))
#print ('prop = ',param3['prop']) #или так
print ('Размер словаря : ',len(param3))
print('''Пример вызова функции testFunc(param1, *param2, **param3) \n''','''testFunc(1,2,'Vasya',4,'Superman',6,a=77,b=88,c=56,d='test',prop='supertest')''')
testFunc(1,2,'Vasya',4,'Superman',6,a=77,b=88,c=56,d='test',prop='supertest')
Результат:
Пример вызова функции testFunc(param1, *param2, **param3)
testFunc(1,2,'Vasya',4,'Superman',6,a=77,b=88,c=56,d='test',prop='supertest')
обычный параметр: 1
Список параметров: (2, 'Vasya', 4, 'Superman', 6)
Именованные параметры (ключ=значение) {'a': 77, 'b': 88, 'c': 56, 'd': 'test', 'prop': 'supertest'}
----------------------------------------
Вывод списков параметров по одному значению в цикле:
Неименованные:
2
Vasya
4
Superman
6
----------------------------------------
Аргумент с индексом 1 = Vasya
----------------------------------------
Именованные:
a : 77
b : 88
c : 56
d : test
prop : supertest
Получение значения по ключу:
prop = supertest
Размер словаря : 5