LoginSignup
13
14

More than 5 years have passed since last update.

*argsと**kargsについてメモ

Last updated at Posted at 2016-12-06

しょっちゅう忘れるのでメモ。

可変長引数

*argsを引数に指定すると、任意の数の引数を受け取ってタプルになる。

>>> def func(a, b, *args):
...     print('a: {}'.format(a))
...     print('b: {}'.format(b))
...     print('*args: {}'.format(args))
...
>>> func(1, 2, 3, 4, 5, 6)
a: 1
b: 2
*args: (3, 4, 5, 6)

**kargsを引数に指定すると、任意の数のキーワード引数を受け取って辞書になる。

>>> def func(a, b, **kargs):
...     print('a: {}'.format(a))
...     print('b: {}'.format(b))
...     print('**kargs: {}'.format(kargs))
...
>>> func(1, 2, x=3, y=4, z=5)
a: 1
b: 2
**kargs: {'z': 5, 'x': 3, 'y': 4}

アンパック代入

リストに*をつけて引数に渡すとアンパックされて引数に代入される。

>>> args = [1, 2, 3]
>>> def func(a, b, c):
...     return a + b + c
...
>>> func(*args)
6

辞書に**をつけて引数に渡すとアンパックされて引数に代入される。

>>> kargs = {'a': 3, 'b': 4, 'c': 5}
>>> def func(a, b, c):
...     return a + b + c
...
>>> func(**kargs)
12

こんなことも

>>> args = [3, 4, 5]
>>> def func(a, b, *args):
...     print('a: {}'.format(a))
...     print('b: {}'.format(b))
...     print('*args: {}'.format(args))
...
>>> func(1, 2, *args)
a: 1
b: 2
*args: (3, 4, 5)

*argsで引数に渡すことでアンパックされ、関数は可変長引数として受け取るのでリストになる。
最初からリストで渡せという話だけどこんなこともできる。

参考サイト

*args **kwargsの意味

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14