pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

Pythonの関数(引数の指定方法)

キーワード引数

引数に名前をつけて渡す。順番が関係なくなる。

>>> 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つ目の例外)