関数を使いこなす方法があれば、知りたい…
と思っていませんか?
引数や戻り値の設定など、初めて使うときは難しいと感じるところも多いですよね。
そこで今回は、
- 【基礎】Pythonの関数とはそもそも何か
- 【基礎】さまざまな関数の使い方
- 【応用】関数の引数を使いこなす方法
について詳しく解説していきます。Python初学者の方に参考になれば幸いです!
※ この記事のコードはPython 3.7で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
Pythonの関数とは
そもそも関数とは何なのかよくわからないという人もいるのではないかと思います。関数とは、ある特定の処理をひとまとまりにしたもののことです。
Pythonではdefに続いて関数を宣言します。
例えばdef samurai()と書いた場合、samuraiという関数が宣言されたことになります。defはdefineが由来で、和訳すると「定義する」という意味です。
そして()の中には、引数を入れることができます。引数とは、「このデータを使って処理してください」と関数にわたす値を指します。
そして、関数の中の処理が引数を使って行われた後に返ってくる値を戻り値と言います。戻り値はreturn hogeという形でreturn文を用いて記述します。
つまり、引数は関数へ材料として与える値、そしてその結果として返ってくる値が戻り値です。
文章で説明してもわかりにくいこともあるかと思いますので、次で簡単な例をもとに解説していきますね。
さまざまなタイプの関数をご紹介
関数では引数や戻り値は省略できる場合は記述する必要はありません。
つまり、関数は大きく分けて
- 引数のある関数
- 引数のない関数
- 戻り値がある関数
- 戻り値がない関数
の4つに分類することができます。
一つずつ見ていきましょう。
引数が無い関数
まずは引数のない関数から説明します。
def samurai(): print('Hello') samurai()
これはsamuraiという関数を宣言しました。
先ほど述べた通り()には本来引数が入るのですが必要ないので省略しました。
結果を見ると、
Hello
はい、4行目でこの関数を呼び出していますが引数がなくてもうまく機能していることがわかります。
引数のある関数
コードから見ていきましょう。
def samurai(a,b): print(a*b) samurai(2,5)
これは(a,b)という引数を与えていますね。そして、4行目でこの引数に(2,5)という実数を代入して呼び出しています。
因みに引数は文字だろうと文字列だろうと数字だろうとなんでも与えることができます。
結果をみてみると、
10
引数をうまく用いて機能したことがわかります。
また、関数に引数を渡す処理として、渡された値を元に分岐処理を行う場合に、関数に引数を渡すことが多いです。
def samurai(input_string): if (input_string == "samurai"): print("samurai") elif(input_string == "engineer"): print("engineer") else: print("それ以外") samurai("engineer")
結果は以下のとおりです。
engineer
戻り値のない関数
次は戻り値のない関数をみてみましょう。
def hello(): print('hello') hello()
詳しくは後述してありますが戻り値とは再利用したい値があるときに使用するので再利用の予定がなければ値を返すreturnは必要ありません。
結果をみてみると、
hello
はい、ここは端折っても良かったのですが一応です。
戻り値のある関数
次は戻り値のある関数をみてみます。
ここが一番難しくて一番大事なので、ゆっくりとコードを読み解きながら見ていってください!
以下のコードを見てください。
def samurai(a,b): c = a*b print(samurai(2,5))
このコードをみてどんな結果が出力されると思いますか?
さっきと同じようにa*bを計算してprintしているので10でしょうか?
結果をみてみましょう。
None
Noneと表示されました。
これはa*bの計算をしてもreturnを使って値を戻してやらなかったため、この関数からは何も戻ってきてませんよ、という意味のNoneが戻り値としてcに代入されてしまったのです。
計算結果をcに戻してやるにはreturn cとしてやれば良いので正しいコードは、
def samurai(a,b): c = a*b return c print(samurai(2,5))
となり
10
うまくcに結果が代入できました。
また、returnではTrue、Falseといった真偽も返すことができるのでこちらも例を挙げてみてみましょう。
def score(a): if a > 60: return True return False print(score(70)) print(score(50))
テストのスコアをaに与えそれが60より大きかったらセーフ(True)、60より小さければ赤点(False)と学校なんかのテストをイメージしてかいてみました。
コードの内容はif文で判定しているだけですが、returnでTrue、Falseを返しているところがここのポイントです。
きちんと判別できているか結果をみてみると
True False
うまく戻り値として機能していますね。
Python関数の引数を使いこなそう
ここまで、Pythonの関数の概要や、引数、戻り値の基礎的な使い方について解説してきました。
よりPythonの関数を使いこなすために重要なのは、引数の応用力を身に着けることです。
そこでここからは、以下3つに分けて引数の応用的な使い方を解説していきます。
- キーワード引数
- デフォルト引数
- タプル・リスト
応用といっても、コードを見ながら使い方を一度覚えるだけです。わかりやすく解説していくので、ぜひ参考にしてみてくださいね!
キーワード引数
1つ目は、「キーワード引数」です。
値を直接入れるのではなく、キーワード(引数名)とセットで指定する方法です。言葉だけではわかりにくいので、サンプルコードを元に見ていきましょう。
サンプルコード:
def testFunc(a,b): print(a+b) print('------値のみの引数------') testFunc(10,100) print('------キーワード引数------') testFunc(a=10,b=100)
実行結果:
------値のみの引数------ 110 ------キーワード引数------ 110
キーワード引数では、「a=10」「b=100」のように、キーワード(引数名)を指定して値を入れています。引数に値のみ入れた場合と、キーワードとセットで入れた場合どちらも同じ結果になっていますよね。
このように、キーワードを指定して引数に値を入れることができるのです。
また、キーワード引数を入れるときは、引数の途中から指定することも可能です。
サンプルコード:
def testFunc(a,b,c): print(a+b+c) testFunc(10,b=100,c=150)
実行結果:
260
このサンプルでは、bとcのみキーワード引数で指定していますが、正しく計算できていますよね。
ただし、「一度キーワード引数を入れると、以降の引数は全てキーワード引数にしないと構文エラーになってしまう」という注意点があるので、注意しましょう。
たとえば次のように、2つ目の引数のみキーワード引数にしてしまうと、構文エラーとなってしまいます。
サンプルコード:
def testFunc(a,b,c): print(a+b+c) testFunc(10,b=100,150)
構文エラーの例:
デフォルト引数
2つ目は、「デフォルト引数」です。
関数を定義する時に、引数のデフォルト値(初期値)を設定する方法です。事前に入れておくと、関数宣言時に引数の値を指定しなくても、デフォルト値を利用して処理を動かすことができます。
言葉だけではわかりにくいので、こちらもサンプルコードを見ていきましょう。
サンプルコード:
def testFunc(price,num,tax_rate=1.1): total_price = (price*num) * tax_rate print("合計金額(税込み):"+str(total_price)) testFunc(1000,10)
実行結果:
合計金額(税込み):11000.0
このサンプルでは、関数定義時に「tax_rate=1.1」をデフォルト引数として指定しています。そのため、関数宣言時にpriceとnumの値のみ指定しても、計算した結果が出力されているのです。
ちなみに、次のように宣言時に引数を指定すれば、指定した値で上書きして計算もできます。
サンプルコード:
def testFunc(price,num,tax_rate=1.1): total_price = (price*num) * tax_rate print("合計金額(税込み):"+str(total_price)) testFunc(1000,10,1.08)
実行結果:
合計金額(税込み):10800.0
testFunc(1000,10,1.08)のように、tax_rateに入る値(1.08)を宣言時に指定しています。その影響で、計算結果も変わっていますよね。
基本的に同じ値を指定する引数がある場合は、デフォルト引数は便利なので、覚えておきましょう。
タプル・リスト
3つ目は、「タプル」と「リスト」を引数に指定する方法です。
- 引数に入れる値の数が増えてしまった場合
- 似たデータを1つのグループとして扱っている場合
など、1つの変数で複数の値を利用したいときは、タプルやリストを引数に指定します。
こちらも、サンプルコードをもとに解説していきますね。
サンプルコード:
def testFunc(name,tel,address): print("名前:" + name) print("電話番号:" + tel) print("住所:" + address) user_info_list = ("リスト太郎","XXX-XXXX-XXXX","XXX-XXXX") user_info_tuple = ["タプル太郎","YYY-YYYY-YYYY","YYY-YYYY"] print("---------リスト---------") testFunc(*user_info_list) print("---------タプル---------") testFunc(*user_info_tuple)
実行結果:
---------リスト--------- 名前:リスト太郎 電話番号:XXX-XXXX-XXXX 住所:XXX-XXXX ---------タプル--------- 名前:タプル太郎 電話番号:YYY-YYYY-YYYY 住所:YYY-YYYY
関数宣言時には引数が3つありますが、タプルまたはリストの変数1つで指定できていますよね。アスタリスク(*)を変数の前に指定して、「*user_info_tuple」のように指定するのがポイントです。
名前、電話番号、住所などの似た属性の値を扱うときに便利なので、覚えておきましょう。
まとめ
今回は、関数の使い方、戻り値return、引数についての説明をしてきました。
関数とは、
- 処理をひとまとまりにしたもの
- 引数は処理に与える材料
- そして出来上がったものをreturnで戻り値として受け取る
でしたね。
returnは値を返すだけで、他の関数で再利用するために使われprintは出力するためだけに使われるということもしっかりと理解しておきましょう。
また、引数の応用的な指定方法も覚えておくと、活用の幅が広がるのでおすすめです!
今回の範囲は、初学者にはつまずきやすいポイントだと思うので、ぜひしっかりと自分の手でコードをかいて確かめてみましょう。
なお、関数以外にもPythonの基礎知識などが知りたい方は以下記事をどうぞ!
Pythonをはじめて学ぶ方のために、Pythonでできることや学習法を中心にご紹介していますので、きっと参考になるかと思います。