Що таке *args та **kwargs в Python

26 вересня 2015 11:44 Q-Bart 614 2

**args і **kwargs - це загальні ідіоми, які дозволяють передати у функцію довільне число аргументів.

*args - повертає кортеж всіх переданих функції неіменованих аргументів:

>>> def foo(*args, g):
    print (args)
>>> foo(1,2,3,g=6)
(1, 2, 3)

**kwargs повертає словник всіх іменованих аргументів функції, окрім тих, що визначені окремо:

>>> def foo(f, **kwargs):
    print (kwargs)
>>> foo(f=1, app=12, gen=23)
{'gen': 23, 'app': 12}

І *args і **kwargs можна використовувати разом в одній функції. Замість args і kwargs можна використовувати будь-які інші назви, також:

>>> def foo(*arguments, **kwarguments):
    print (arguments)
    print (kwarguments)
>>> foo(1,2,3, a=1, b=2,c=3)
(1, 2, 3)
{'b': 2, 'a': 1, 'c': 3}

Використання * синтаксису, також можливе при виклику функції:

>>> def foo(a, b, c):
    print (a,b,c)
>>> abc = [1,2,3]
>>> foo(*abc)
1 2 3
>>> 

Ще одну цікаву можливість використання * синтаксису було додано в третю версію Python:

>>> first, *other = [1,2,3,4]
>>> first
1
>>> other
[2, 3, 4]
>>> first, *other, penult, last = [1,2,3,4]
>>> other
[2]

614 5

Схожі матеріали:

Коментарі:

v-e-y

20 Січ 2016 00:51

Дякую за статтю. Завжди цікавило що це, а погуглити руки не доходили.
Там підправити трошки потрібно "print(arguments)", пробіл відсутній.

Q-Bart

26 Січ 2016 19:26

Ок, зараз виправимо

Авторизуйтесь, щоб залишити коментар.