[光-Hikari-のPython]06章-01 関数（組み込み関数と関数の定義）

#[Python]06章-01 組み込み関数と関数の定義
この章から、関数（Function）について説明していきます。関数はPythonだけでなく、どのプログラミング言語でも登場する概念です。ぜひ押さえておきましょう。

関数というと数学で1次関数や2次関数といったものを中学・高校時代に学んだと思います。例えば以下の2次関数、

```math
f(x) = x^2+3x+4
```
があったとき、x=2とすると、

```math
f(2) = 2^2+3・2+4
=14
```
と求めることができました。

プログラムにでも、上記のx=2のように、何か値を入れると、**値が返ってくる**ものを関数として定義することができます。
今回はその関数の作成の方法について見ていきたいと思います。

##組み込み関数

実際に過去に、**print関数、int関数、str関数、len関数、sorted関数、range関数**などといったものに触れたと思います。実際に見てみましょう。**Python Console**から以下のコードを入力してください。

```.py
>>> str = 'hello'
>>> len(str)
5
>>> ls = [1, 2, 3, 4, 5]
>>> len(ls)
5
```

今は**len関数**で説明しましたが、上記のx=2を指定するのと同じで、lenに文字列の変数やリストの変数を入れると、長さ（もしくは要素数）が返ってきます。

**len関数**だけではないですが、**print関数、int関数、str関数、sorted関数、range関数**はもともとPythonで用意されている関数です。こういった関数を**組み込み関数**と言います。
組み込み関数には多種あります。以下のリンクから組み込み関数や使用方法などを確認できます。

[https://docs.python.org/ja/3/library/functions.html](https://docs.python.org/ja/3/library/functions.html)

なお、関数を使うことをよく**「関数を呼び出す」**ということもあります。

##関数を自作する
先ほど、あらかじめ用意された組み込み関数について触れましたが、関数を自作して使うことも可能です。これを**関数の定義(Definition)**と言います。

関数の定義を使うことで、長いプログラムを役割ごとに部品化することができ、可読性も上がります。

実際に関数を定義するには以下の方法があります。

```.py
def 自作関数名(引数):
    関数を呼び出した際に実行される処理内容
```

最初の**def**というのは、定義するといったdefinitionの意味で、関数を定義しますといった記載です。
そして自分で作った関数名を定義し、if文やwhile文などのときと同じように**:**（コロン）を付与して、そのあとに関数内の処理内容を記載します。

なお、上記の**引数（ひきすう）**について、これが先ほどの**x=2**といった、値を入れる個所です。これについては次回説明したいと思います。

今から関数の例を示しますが、まずは引数なしで説明してみたいと思います。<font color="#00cccc">chap06</font>を新たに作成し、その中に、<font color="#00cccc">samp06-01-01.py</font>というファイル名でファイルを作成し、以下のコードを書いてください。簡単に説明すると、あいさつ（greeting）をするための関数（function）と思っていただいて構いません。


```.samp06-01-01.py
def greet_func():
    print('関数内で実行しています')
    print('こんにちは！')
```
さて、上記を実行してください。

><font color="#090" bgcolor="black">【実行結果】</font>
　

実際に実行すると何も表示されません。今回の**greet_func関数**を定義しただけでは、意味をなさず、「**greet_func関数**を動かしてください」といった**呼び出す処理**は別に指示する必要があります。

先ほどのプログラムに以下を追加してください。

```.samp06-01-01.py
def greet_func():
    print('関数内で実行しています')
    print('こんにちは！')

print('今からgreet_func関数を呼び出します。')

#greet_func関数を呼び出す
greet_func()

print('関数内の処理は終了しました！')
```

><font color="#090" bgcolor="black">【実行結果】</font>
今からgreet_func関数を呼び出します。
関数内で実行しています
こんにちは！
関数内の処理は終了しました！

関数は前述した通り、定義しても呼び出さないと意味を成しません。組み込み関数の**print関数**や**len関数**なども当然ですが、呼び出さないと使うことはできませんよね。それと同じこととなります。今回はオリジナル自作の**greet_func関数**を呼び出しています。

基本的に関数は最初に書くことが多いです。実行すると関数の部分

```.py
def greet_func():
    print('関数内で実行しています')
    print('こんにちは！')
```

を飛ばして、**「今からgreet_func関数を呼び出します。」**と出力しています。

そして、以下のフローチャートのように、関数を呼び出し、関数内の処理が終わると呼び出し元に戻り、通常通りの処理が始まり、「関数内の処理は終了しました！」と出力されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602679/958648cc-559f-310c-85d8-4e275bf2ea6c.png)

##複数の関数の作成
関数を複数作成することもできます。以下のコードを入力してください。<font color="#00cccc">chap06</font>フォルダの中に、<font color="#00cccc">samp06-01-02.py</font>というファイル名でファイルを作成し、以下のコードを書いてください。

```.06-01-02.py
def morning_func():
    print('朝の関数が呼び出されました。')
    print('おはようございます！')

def afternoon_func():
    print('昼の関数が呼び出されました。')
    print('こんにちは！')

def night_func():
    print('夜の関数が呼び出されました。')
    print('こんばんは！')

#数値を入力する箇所
judge = int(input('朝であれば0、昼であれば1、夜であれば2を入力：'))

if judge == 0:
    morning_func()
elif judge == 1:
    afternoon_func()
elif judge == 2:
    night_func()
else:
    print('正しい値を入力してください。')

```
><font color="#090" bgcolor="black">【実行結果】</font>
朝であれば0、昼であれば1、夜であれば2を入力：2
夜の関数が呼び出されました。
こんばんは！

今回は関数を3つ書きましたが、実際に**関数はいくつ書くことも可能**です。今回の処理内容は、入力した数値によって、呼び出す関数を変えています。
入力した値が指定した値以外（今回は5としています）が入力されたら、再入力を求められます。

正しい値を入力（今回は2としています）すると、それに見合った関数が呼び出され、関数内で処理がされます。今回は夜の関数（**night_func**）が呼び出されるので、night_func関数内の処理が実行されます。

以下に今回の処理内容をフローチャートでまとめてみました。（今回、関数内部の処理は割愛しております。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602679/4a9c6760-9a31-57f1-d53e-45379651e455.png)



##最後に
今回は関数という、どのプログラミング言語でも登場する概念について触れました。関数は今まではすでに準備してある関数（組み込み関数）を使うものと思っていたかもしれませんが、実は自作することもできるのです。
今回触れた関数は、単純なものですが、次回は少し深く触れてみたいと思います。

###[【目次リンク】へ戻る](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)