[Python入門]#05 def文を使う関数定義の基礎

今回は関数。しかし一言で関数と言っても多種多様すぎる。

ここはひとつ超基礎的な関数を作りながら、その内部を学んでしまおうというコンセプトでお送りします。

関数とは?

関数の定義に関しては、一言で言い表すのはとても難しいのではないでしょうか。

最も多くの関数が当てはまるような説明となると、以下のようになってしまうからです。

「何らかの入力があり(もしくは無く)、何らかの内部処理があり(もしくは無く)、何らかの出力がある(もしくは無い)もの」

広いですね…その上抽象的すぎて理解しにくいです。

関数定義してみる

分からないので、まずは関数を作ってみるところから始めてみます。

def multiply(a):
    print(a*2)

たった2行ですが、これで1つの関数が出来上がりました。受け取った値を×2してコンソールに表示する関数です。

それではこの文を細かく分解して見ていきましょう。

[def]

define(定義する)の略。関数を定義するのであればこの「def」を始めに記述しましょう。関数名を付けるのであれば必須です。

[multiply]

defからスペース1つを挟んで関数名です。ここでは例として「掛ける」という意味の単語を使用しています。

関数名の命名規則は変数と同じですので、小文字の英数字、アンダースコアを使用します。

[(a)]

この()が関数の入力を受け付ける場所。関数呼び出しの際、ここに入力された値は引数と呼ばれ、後の処理で使用されます。

引数が設定された関数を「引数を取る関数」
関数呼び出しの際、()内に値を入力することを「関数に引数を渡す」
といいます。

「a」は引数の仮の名前。関数定義の中で引数を扱うために使用する文字です。基本的に自由ですが短いアルファベットや、その値がどのように関数内で使用されるのか分かりやすい名前を付けましょう。

[:]

コロン。複合文のヘッダの終了文字として使用されます。

関数などの処理を含む文(for文やクラス定義)は複合文と呼ばれ、1行で完結する単純文とは区別されています。

複合文の1行目をヘッダといい、ヘッダの終わりにはこのコロンが必要になっています。

[ ]

2行目の始めはインデント(字下げ、段落)です。

他の多くの言語ではインデントは、可読性を上げるために使用されるだけですが、Pythonはインデントによって複合文のヘッダと処理内容を区別しています。

つまりこのインデントは必須です。

インデントに使用する文字、サイズは個人の好みもあるかもしれませんが、Pythonでは「スペース4つで1段階のインデント」が推奨されています。

[print(a*2)]

インデントの後に処理内容です。引数として受け取った値を×2してコンソールに表示しています。

今回は単純な1行の処理ですが、処理が複数行に渡る場合、後の行もインデントを揃えて記述しましょう

関数の呼び出し

この2行の関数で、関数の基本構造の大まかなところは説明できるかと思います。一度実行してみましょう。

def multiply(a):
    print(a*2)

multiply(7)     #14
multiply("ぺり")     #ぺりぺり

関数の呼び出しは関数名(引数)と至極単純です。

今回の場合、数値でも文字列でも可能な「×2」という処理内容なので、引数はどちらの型でもエラーにはなりません。

関数の出力は?

この関数を冒頭の説明に当てはめると、以下のようなものになります

  1. 1つの引数(入力)を取り、

  2. 引数を×2したものをコンソールに表示するという内部処理があり、

  3. 出力が無い関数

「え、出力が無い?」と疑問に思われた方は僕と同じです。僕も昔思いました。コンソールに出してるやないかと。

しかし関数の出力は、コンソール出力とはまた違った意味を持っています。次に示すのは先ほどと同じような2行の関数ですが、

  1. 引数を取らず、
  2. 出力以外の内部処理が無く、
  3. 出力がある関数

です。

def greeting():
    return "おはよう"

出力がある = return文がある

まずは1行目、()の中に何も入っていません。これで引数を取らない関数になりますが、()は省略できないことに注意しましょう。

そして2行目。先ほどとは違って「return 値」となっています。

このreturnが記述された関数は値を返す関数です。この返ってきた値を戻り値、もしくは返り値と呼びます

関数の戻り値(返り値)はどこに戻る?

では試しにこの出力がある関数を実行してみましょう。

def greeting():
    return "おはよう"

greeting()     #

ただの呼び出しではコンソールに何も出力されません。しかし、確かに"おはよう"はどこかに出力されているはずです。

この関数呼び出し自体をprint関数に入れてみます。すると、

print(greeting())      #おはよう

関数の出力は「関数呼び出し」をprintすることで表示されます。つまりreturnがある関数は、関数呼び出しがそのまま戻り値として機能するわけです。

関数の戻り値がどこに戻るのか分かったところで、「じゃあこのreturn文は何の利点があって記述されるのか?」については次回お話したいと思います。

タイトルとURLをコピーしました