理由はそのうち考える

まずやってみよう

Python学習メモ:関数

gihyo.jp

関数

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式は関数オブジェクトなので、関数を引数に取る関数にも使用できる。