こんにちは、タナカです。
この記事では、関数の使い方をできるだけわかりやすく解説したいと思います。
pythonを勉強し始めたけど、「関数って難しいよね」って思う方も結構いらっしゃると思います。実際このようなことで悩んでいる人や疑問を感じる人もいるのではないでしょうか。
- pythonを学習し始めたけど、関数がよくわからない
- 関数がいまいち腹落ちしない
- 使うまでのハードルが高い
実際、私が勉強したての頃は、関数なんて一切使っていませんでしたし、returnが意味分からなすぎて嫌いでした。
それでも、pythonを勉強するのであれば、避けては通れない道なので頑張って理解したのを覚えています。
これからpythonを勉強する人にとって少しでも理解が深まるように説明していきたいと思います。
- 関数についてわかる
- 返り値(return)がわかる
1. 関数とは
関数とは、ある値を入れたときに何らかの処理をして値を返すものです。イメージはこんな感じです。
例えて言うなら、あんこ(input)を入れたら、どら焼き(output)になりましたってやつですね。
inputは引数、outputは返り値(戻り値)と言われたりします。inputに対して、関数が中でごにょごにょ処理をして、outputが出力されるわけです。
この一連の動作をpythonでは「def文」を使って書くことになります。
def文は書き方が定義されており、以下のように書きます。
def 関数名(引数1, 引数2, ...):
処理の中身
return 返り値
なぜ関数が難しいかというと、関数名や引数、処理の中身、返り値すべてを自分で決めなければいけないからです。学習し初めのころは、処理したいこと自体が思い浮かばないなんていうのは当然です。
初めのうちは難しいですが、意識して使っていれば、必ず理解することができます。
2. 関数を使うと何がいいの?
では、関数のイメージはつかめたけど、そもそも関数を使うことにメリットあるの?と疑問に思うかもしれません。
私自身、pythonを勉強していた当初は関数を書く意味が分かりませんでした。別に関数を使わなくてもプログラミング自体はできるし、処理も動くじゃんすら思っていました。
それでも関数を使うことが推奨される理由は、コードをシンプルに書けるからです。
シンプルとはプログラム自体のコードが少なく、可読性やメンテナンス性、汎用性に優れていることを意味します。
例えば、100行で書かれたコードと10行で書かれたコードが全く同じ処理を実行できるのであれば、10行で書かれたコードのほうがシンプルです。
仮に100行の中のどこかにバグが含まれていたとき、そのバグを見つけるのは大変ですが、10行であれば簡単に見つかりそうですね。
それでは、実際にコードを書きながら関数を理解していきます。
3. 例を使って理解する
先ほどのイメージを思い出してください。inputした値が何かしらの処理をされてoutputとして出力されます。
例として、inputに2を入れてoutputとして4を出力する関数を考えます。
この関数は、例えば f(x) = x2で実現できそうですね。
これを実際に関数で書いてみるとこうなります。
def example(x):
fx = x ** 2
return fx
input = 2
output = example(x = input)
print(output)
# >> 4
xという引数にinput = 2を代入しています。その結果をoutputという変数に入れて出力しています。
このような簡単な処理なら、関数を使う必要なんてないと思うかもしれません。
では、このような複雑な式の場合はどうでしょうか。
この式は関数を使わずに書くとこのようになります。
x = 2
a = x + 1
b = a + 2
c = b + 3
d = c + 4
e = d + 5
f = e + 6
g = f + 7
h = g + 8
i = h + 9
print(i)
# >> 47
変数x(input)の中に2を代入して、最終的な値としてi(output) = 47を出力しています。
例えば、x = 2の場合と、x = 10の値を取得したいと考えたとき、関数を使わないとこのようになります。x = 2の場合は変数にすべて1をつけ、x = 10の場合には変数に2をつけて違うものとして扱っています。
x1 = 2
a1 = x1 + 1
b1 = a1 + 2
c1 = b1 + 3
d1 = c1 + 4
e1 = d1 + 5
f1 = e1 + 6
g1 = f1 + 7
h1 = g1 + 8
i1 = h1 + 9
print(i1)
# >> 47
x2 = 10
a2 = x2 + 1
b2 = a2 + 2
c2 = b2 + 3
d2 = c2 + 4
e2 = d2 + 5
f2 = e2 + 6
g2 = f2 + 7
h2 = g2 + 8
i2 = h2 + 9
print(i2)
# >> 55
inputの値を変えるだけでも再度同じ数式を記述していることがわかります。このような重複をできるだけなくしたり、もっと楽にコードを書く方法として関数があるのです。
実際に関数を使って記述するとこのようになります。
def example2(x):
a = x + 1
b = a + 2
c = b + 3
d = c + 4
e = d + 5
f = e + 6
g = f + 7
h = g + 8
i = h + 9
return i
x1 = 2
x2 = 10
i1 = example2(x = x1)
print(i1)
# >> 47
i2 = example2(x = x2)
print(i2)
# >> 55
コードの中に同じような処理が出てくる場合、一度関数にしておくと使いまわしができることがわかります。
もしx3 = 100の場合のi3を取得したい場合でも、関数に値を入れてあげることで簡単に記述することができますね。
4. returnについて理解する
最後に関数を使う上で重要なreturnの役割について説明します。
returnを書くことで関数の中で処理した結果を返すことができます。
今まではすべてreturnがある前提で話をしていました。つまり、関数は必ず値を返して、その値を出力することができていました。
それでは、returnがある場合とない場合を図で表すとこのようになります。
また、このイメージを関数を使って書くとこのようになります。
# returnがある場合
def example1(x):
y = x ** 2
return y
input1 = 2
output1 = example1(x = input1)
print(output1)
# >> 4
# returnがない場合
def example2(x):
y = x ** 2
output2 = example2(x = input1)
print(output2)
# >> None
returnがある場合はf(x) = x2から4を出力できていますが、returnがない場合はNoneを出力しています。
returnがない場合でも関数の中ではf(x) = x2を計算しているのですが、最後にreturnがないため、関数の中で処理した結果を返すことができていないのです。
このように関数とreturnはセットで使われることが多いのです。
ただ、オブジェクト指向で書く場合はreturnがない場合もありますが、これはまた別の話です。
まとめ
pythonの関数について解説しました。関数のイメージはつかめたでしょうか。
初めのうちは、理解しがたい概念のため実際に使おうとするとかなり難しいと思います。
世の中に出回っているコードを模写したり、簡単なコードからでいいので、少しずつ慣れていっていただければと思います。
最後までお読みいただきありがとうございました。