キーワード引数
引数に名前をつけて渡す。順番が関係なくなる。
>>> def hoge(a1, a2, a3): ... print(a1,a2,a3) ... >>> hoge(1,2,3) 1 2 3 >>> hoge(a3=1,a2=2,a1=3) 3 2 1 >>>
引数をまとめて渡す方法
リストの要素を引数で渡す場合(*を付ける)
>>> def hoge(a1, a2, a3): ... print(a1,a2,a3) ... >>> hoge(1,2,3) 1 2 3 >>> a = [5,6,7] >>> hoge(*a) 5 6 7 >>> hoge(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: hoge() missing 2 required positional arguments: 'a2' and 'a3' >>>
hoge(a)で渡すと、リストオブジェクト1つだけが引数扱い。関数側で引数不足になる。
hoge(*a)で渡せば要素が引数となる。
ディクショナリのKey,Valueをキーワード引数で渡す場合(**をつける**)
>>> def hoge(a1, a2, a3): ... print(a1,a2,a3) ... >>> a = {'a1':1, 'a2':2, 'a3':3} >>> hoge(**a) 1 2 3 >>> hoge(*a) a2 a3 a1 >>>
アスタリスク(*)2個の場合はkey,valueがキーワード引数で渡される。
1個の場合は、キーが渡される
デフォルト引数
引数の省略が可能。デフォルト値が利用される。
>>> def hoge(a1,a2,a3=3): ... print(a1,a2,a3) ... >>> hoge(1,2) 1 2 3 >>>
可変長引数
引数の数を事前に決めない方法
タプルで受ける場合(*をつける)
>>> def hoge(a1,*b): ... print(a1,b) ... >>> hoge(1,2,3,4,5) 1 (2, 3, 4, 5) >>>
ディクショナリで受ける場合(**をつける)
>>> def hoge(a1,**b): ... print(a1,b) ... >>> hoge(1,2,3) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: hoge() takes 1 positional argument but 3 were given >>> hoge(1,a2=2,a3=3) 1 {'a2': 2, 'a3': 3} >>>
他記述(*だけ)
キーワード引数限定にする
>>> def hoge(a1, *, k1='huga'): ... print(a1,k1) ... >>> hoge(1) 1 huga >>> hoge(1,2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: hoge() takes 1 positional argument but 2 were given >>> hoge(1,k1=1) 1 1 >>> hoge(1,k2=1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: hoge() got an unexpected keyword argument 'k2' >>>
a1の後に、*を記述すると、以降はキーワード引数以外だと例外発生する指示になる。(上記1つ目の例外)
ただキーワード引数でも、関数側で定義ないキーワードでは受けない。(上記2つ目の例外)