プログラムを効率よく書くためには、同じ処理を繰り返し使える「関数」を理解することが重要です。
関数とは何か
関数とは、ひとまとまりの処理を名前を付けて定義したものです。 一度定義すれば、何度でもその処理を呼び出して使うことができます。
関数の定義と呼び出し
Pythonで関数を定義するには、def
キーワードを使います。以下は基本的な構文です。
def 関数名(引数1, 引数2, ...): 処理 return 戻り値
例として、2つの数を足し合わせる関数を作ってみましょう。 この関数を呼び出すには、関数名と引数を指定します。
>>> def add(a, b): ... return a+b ... >>> add(2, 4) 6 >>>
引数のない関数
引数を取らない関数も定義できます。例えば、文字列"Hello, world."を返す関数を作ります。
>>> def greet(): ... return "Hello world." ... >>> greet() 'Hello world.' >>>
引数が無くても、関数名に続くカッコは省略できないことに注意しましょう。
戻り値のない関数
return
を省略すると、戻り値はNone
というオブジェクトになります。
None
は何もないという意味で使われます。
次の例では、引数を2倍にして表示するだけの関数を作ります。
>>> def double_print(x): ... print(x*2) ... >>> a = double_print(10) 20 >>> a >>> print(a) None >>>
- 5行目では、関数内の
print
文が実行され、10の2倍の20が表示される - 6行目で変数
a
の値を表示させようとしているが、Pythonを対話的に動かしているときにNone
は表示されないことになっている - 7行目では
print
文でa
の値を表示する。その結果が8行目のNone
になっている
良く使うprint
関数も戻り値がNone
になっています。
なお、関数の中でreturn None
としてもNone
を返すことができます。
デフォルト引数
関数にデフォルト値を設定することで、引数を省略した場合に使われる値を指定できます。
>>> def greet(name="world"): ... print(f"Hello, {name}!") ... >>> greet() Hello, world! >>> greet("Alice") Hello, Alice! >>>
可変長引数
引数の数を固定しない関数を、*args
または**kwargs
を使い、作ることができます。
関数呼び出しでは、任意の引数を与えることができ、関数内ではそれをタプル、または辞書型として処理できます。
*args
: 任意の数の位置引数をタプルとして受け取る**kwargs
: 任意の数のキーワード引数を辞書型として受け取る
次の例では任意の個数の数値を引数にできます。
関数側では、引数をタプルとして受け取っています。
sum
はタプルやリストの合計を求める関数です。
>>> def summarize(*args): ... return sum(args) ... >>> summarize(1, 2, 3, 4, 5) 15 >>>
次の例では可変長のキーワード引数を使って関数定義をしています。 キーワード引数とは、辞書型のように、キーと値のペアで各引数を与えるものです。
>>> def display_info(**kwargs): ... for key, value in kwargs.items(): ... print(f"{key.capitalize()}: {value}") ... >>> display_info(name="Alice", age=30, country="USA") Name: Alice Age: 30 Country: USA >>> display_info() >>> display_info(language="Python", version="3.11", author="Guido van Rossum") Language: Python Version: 3.11 Author: Guido van Rossum
関数を使うメリット
関数は、特定の処理を再利用したいときやコードを簡潔にしたいときに役立ち、複雑なアルゴリズムを分割して分かりやすくできるという利点があります。 また、プログラムが読みやすくなるとともに、バグの場所がどこにあるかが分かりやすくなり、修正が容易になるというメリットもあります。