python Что обозначает * и ** у параметров функций?


#1

Не могу понять какая разница между параметрами при приписывании к их названиям * / ** и без этого, как это может влиять на работу данной функции и программы в целом. Расскажите ример:'

def testFunc(param1, *param2, **param3):
     ...

Какая здесь будет разница при работе с param1, param2 и param3?


#2

*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

#3

спасибо, Ваш пример помог мне разобраться!:smile: