Python学習メモ:関数
関数
Pythonの関数定義は以下の通り。
def 関数名(引数1, 引数2, …): 処理 return 戻り値
カッコの代わりにコロンを使うところは制御構文と同じ。引数、戻り値は不要ならそれぞれ省略できる。 Pythonでは関数名はスネークケースが用いられるのが一般的なよう。
デフォルト引数を使用する場合は引数名に=デフォルト値とする。
またPythonでは関数はオブジェクトであるため、変数に代入したりできる。
def printHoge(): print(‘hoge’) func = printHoge func() # printHogeと同じ
関数のさまざまな引数
位置引数
関数の呼び出しで、仮引数名を指定せずに渡す実引数を位置引数という。C++やC#などの言語での呼び出し方法。
hogeFunc(1,2)
キーワード引数
関数の呼び出しで、仮引数名を指定して渡す実引数をキーワード引数という。キーワードを指定する場合は、順番に影響しない。
def hogeFunc(hoge, piyo): print(hoge + piyo) hogeFunc(piyo=‘aaa’, hoge=‘bbb’)
可変長の位置引数
仮引数名に * をつけると、可変長の引数を定義できる。
引数名には慣例として、*argsとすることが多い。
def hogeFunc(*args): for i, e in enumerate(args): print(f’arg{i+1} :{e}’) hogeFunc(‘hoge’, ‘piyo’, ‘fuga’)
可変長のキーワード引数
仮引数名に ** をつけると、可変長のキーワード引数を受け取る関数が定義できる。
引数名には慣例として、 **kwargsとすることが多い。指定された引数は辞書で受け取る。
def hogeFunc(**kwargs) for key, value in kwargs.items(): print(f’{key}: {value}’)
キーワードのみ引数
呼び出し時に仮引数名の指定が必須になる引数。キーワードのみ引数としたい仮引数の前に*を指定する。
def hogeFunc(hoge, *, piyo): # piyoがキーワード必須になる print (hoge+piyo) >>> hogeFunc('hoge', 'piyo') # キーワードなしで呼ぶとエラー Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: hogeFunc() takes 1 positional argument but 2 were given
位置のみ引数
仮引数名を指定するとエラーになる引数。位置のみ引数としたい仮引数の前に / を指定する。 Python3.8からユーザー定義関数でも使用できるようになった。
引数リストのアンパック
関数呼び出し時に * でリストや辞書から引数を展開する機能。
hogeList = [‘hoge’, ‘piyo’, ‘fuga’]
hogeFunc(*hogeList) # hogeFunc(‘hoge’, ‘piyo’, ‘fuga’)
同様にして ** を使用すると、辞書に格納している値をキーワード引数として渡すことができる。
lambda式
Pythonにおけるlambda式は以下のとおり。
lambda 引数1,引数2, … : 戻り値になる式
lambda式は関数にするほどでもないちょっとした処理に使うと便利。またlambda式は関数オブジェクトなので、関数を引数に取る関数にも使用できる。