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, b と return (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_temperature、parse_header、is_valid。避けるべき例:
do_stuff、handle1、temp_func。
先頭のアンダースコア(_helper)は、関数がそのモジュールの内部向けであることを示します。この慣習は広く尊重されていますが、Python によって強制されるものではありません。