2.14. 関数の定義

関数は、コードのまとまりに名前を付けてパッケージ化し、さまざまな場所から呼び出せるようにします。計算、動作、あるいは何らかの形を持つ処理が 2 回以上現れる場所であれば、関数はそれを 1 つの名前付きのものに変えてくれます。

キーワードは def です。

def greet(name):
    print("hello,", name)

greet("Alice")
greet("Bob")

出力:

hello, Alice
hello, Bob

def で始まる行が定義です -- 関数を作成しますが、本体は実行しません。greet("Alice") を呼び出すことが、インデントされたブロックを実行します。

2.14.1. パラメータと引数

def 行の括弧の中の名前がパラメータです -- 呼び出し側が指定する値のためのプレースホルダです。実際に渡される値が引数です。関数は 0 個以上のパラメータを取ることができます。

def square(x):
    return x * x

def add(a, b):
    return a + b

def is_even(n):
    return n % 2 == 0

引数の数が間違っている呼び出しは、ただちに TypeError を送出します。

2.14.2. return

return 文は関数をただちに終了し、値を呼び出し側に返します。

def absolute(x):
    if x < 0:
        return -x
    return x

return に決して到達しない(または値のない単なる return を持つ)関数は、None を返します。

>>> def shout(text):
...     print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None

関数は複数の return 文を持つことができます。最初に到達したものが有効になり、本体の残りはスキップされます。

2.14.2.1. 複数の値を返す

Python は 1 回の呼び出しにつき 1 つのオブジェクトを返しますが、そのオブジェクトは tuple でもよく、呼び出し側はその場でそれをアンパックできます。

def minmax(values):
    return (min(values), max(values))

lo, hi = minmax([3, 1, 4, 1, 5, 9])

戻り値を囲む括弧は省略可能です。return a, breturn (a, b) は同じです。

2.14.3. ドキュメント文字列(docstring)

関数本体の最初の文として置かれた文字列リテラルは、ドキュメント文字列(docstring)です。これは関数オブジェクトに格納され、help() が表示する内容になります。

def scale(value, factor):
    """Multiply ``value`` by ``factor`` and return the result."""
    return value * factor

IDE は、カーソルが関数名の上にあるとき、ツールチップにドキュメント文字列を表示します。そのため、1 行の要約であっても十分に役立ちます。三重引用符の文字列を使うと、より詳しい説明が役立つ場合に、ドキュメント文字列を複数行にわたって書けます。

2.14.4. 命名規則

関数名には snake_case を使います -- アンダースコアで区切られた小文字の単語です。名前は、その関数が何をするかを表すべきです。

  • 良い例read_temperatureparse_headeris_valid

  • 避けるべき例do_stuffhandle1temp_func

先頭のアンダースコア(_helper)は、関数がそのモジュールの内部向けであることを示します。この慣習は広く尊重されていますが、Python によって強制されるものではありません。