こんにちは。
今回は関数に関する内容です。
関数に関わる言葉として、引数と返り値(戻り値)の2つがあります。
ピンと来ない方は復習しておきましょう。
関数の基本的な内容については、以下の記事を参照にしてください。
【Python】関数の基本について【初心者向け】
続きを見る
関数についての復習
- 引数: 関数の () に入るデータの値
- 返り値(戻り値):関数によって出力されるデータ
今回は関数について深く知りたい方に向けた記事になります。
本記事の学習内容
- 引数のない関数の作成方法
- 引数のある関数の作成方法
- 戻り値のある関数の定義
- 関数から抜ける方法
では早速学習していきましょう。
関数の作り方
引数のない関数の作り方
関数は def()
を用いて定義されます。
また、 for
, while
, if
と同様に def()
の後には :
が付けることがルールとなっています。
:
がついてからタブキーで改行されている範囲までが def()
の通用範囲となります。
また、def
の後に定義されている関数のみを記入すると、その関数を実行する、という意味になります。
実際に見ていきましょう。
In[]
1 2 3 4 5 6 7 8 9 10 | def medical_department1(): print("obstetrics") # medical_department1()の通用範囲 print("gynecology") # medical_department1()の通用範囲 def medical_department2(): print("surgery") # medical_department2()の通用範囲 print("urology") # medical_department2()の通用範囲 medical_department1() # medical_department1()を実行する medical_department2() # medical_department2()を実行する |
出力するとこのようになります。
Out[]
1 2 3 4 5 6 7 | obstetrics gynecology surgery urology Process exited with code: 0 |
引数のある関数の作り方
引数のある基本的な使い方
引数を持つ関数を作る際には def 関数名(引数)
の様に記載します。
introduce()
の ()
の内部には2つの引数が格納されています。
引数の順番に出力される事に注意しましょう。
In[]
1 2 3 4 5 6 7 | def introduce(name, medical_department): print("Hi!") print(f"My name is {name}") print(f"I work for medical department of {medical_department}.") introduce("tommy", "obgyn") introduce("kitagawa", "surgery") |
1 2 3 4 5 6 7 8 9 | Hi! My name is tommy I work for medical department of obgyn. Hi! My name is kitagawa I work for medical department of surgery. Process exited with code: 0 |
キーワードを使用した引数のある関数の使い方
上の項では introduce()
の引数の順番によって、出力される順番が変わってきました。
そこで、引数を記載する順番によってデータを指定する方法以外に、キーワード引数を使用した仕組みを利用して関数を実行する方法を使います。
キーワード引数名 = データ
を利用する事により、記述した引数の順番に関係なく出力するデータを指定することが可能です。
In[]
1 2 3 4 5 6 7 | def introduce(name, medical_department): print("Hi!") print(f"My name is {name}.") print(f"I work for {medical_department}.") introduce(name = "tomy", medical_department = "obgyn") #「キーワード引数名 = データ」を記載 introduce(medical_department = "surgery", name = "kitagawa") #「キーワード引数名 = データ」を記載 |
上記コードの最後の行の name
, medical_department
を入れ替えましたが、実行結果はどの様になるのかを見てみましょう。
1 2 3 4 5 6 7 8 9 | Hi! My name is tomy. I work for obgyn. Hi! My name is kitagawa. I work for surgery. Process exited with code: 0 |
引数のデフォルト値
引数にデフォルト値を設定すると、引数にデータを記述しなかった場合に、関数を実行する際に指定されたデフォルトの値が出力されます。
前項にも記載している通りに引数にデータを記述した際には、そのデータが関数内で使用されることができます。
1 2 3 4 5 6 7 8 9 10 | def introduce(name = "tomy", medical_department = "obgyn"): print("Hi!") print(f"My name is {name}.") print(f"I work for {medical_department}.") introduce("kimura", "gynecology") #引数を全て指定 introduce("tominaga") # nameを指定しmedical_departmentを省略 introduce("aoki") # nameを指定しmedical_departmentを省略 introduce("gynecology") # nameを省略し、medical_departmentを指定 introduce() # nameもmedical_departmentも省略 |
実行した結果、以下の様になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Hi! My name is kimura. I work for gynecology. Hi! My name is tominaga. I work for obgyn. Hi! My name is aoki. I work for obgyn. Hi! My name is gynecology. I work for obgyn. Hi! My name is tomy. I work for obgyn. Process exited with code: 0 |
戻り値がある関数の定義
戻り値がある場合の関数の定義について現したいと思います。
戻り値や引数を指定する関数の基本形はこの様ななっています。
1 2 3 | def 関数名(引数1, 引数2...): 処理 return 戻り値 |
ここで例としてBMIの計算を行なってみましょう。
1 2 3 4 5 6 7 8 9 | def calc_bmi(height, weight): bmi = weight / height ** 2 return bmi height = float(input("身長(m)を入力:")) weight = float(input("体重(kg)を入力:")) BMI = calc_bmi(height, weight) print(f"BMI値:{BMI:.1f}") |
出力結果の例は以下となります。
1 2 3 4 5 6 | 身長(m)を入力:1.78 体重(kg)を入力:78 BMI値:24.6 Process exited with code: 0 |
ここで、def
の 次の行に出てくる bmi
は関数の定義を行う際のみに利用できる変数です。この様な変数を「ローカル変数」と言います。
整数int
や浮動小数点数float
に変換したい場合はint()
, float()
を使います。float()
, int()
については以下の記事を参照にしてください。
なお、小数点以下の桁数を指定してprintする際には、置換フィールドに{:.○f}と書きます。この’f’は、’floating point numbers(浮動小数点数)’の’f’です。
>> Pythonのprintで桁数(数値や少数点以下など)を指定して出力する方法
ここで出てくる「置換フィールド」という言葉が分からない方は、置換フィールドとformat構文の関係については以下を参照にしてください。
>> [Python入門]文字列の書式指定
途中で関数から抜ける方法
関数を使用するときには if
や for
などの繰り返し処理における break
の様に None
というオブジェクトを使用すれば「途中で処理を終了する」ことができます。
関数を定義する処理に置いて「途中で抜ける」ためには return None
と記述してください。
ほぼ break
の様な扱いとなります。
実際に「数字を入力して貰い、1から入力された数字までを求める」コードを作成してみます。
In[]
1 2 3 4 5 6 7 8 9 10 11 12 13 | def sum_nums(): input_num = int(input("数値を入力してください:")) if input_num < 0: return None nums = 0 for i in range(input_num + 1): nums += i return nums print(sum_nums()) |
ここで、 return None
の箇所は単純に return
のみでも構いません。
また、
1 2 3 | nums = 0 for i in range(input_num + 1): nums += i |
また、この箇所でつまづく方が多いのですが、これは単純に「input_num
」である最大値までを 順番に足していく事を意味しています。
ですで、i
には 0,1,2,3,4,5,6,7,8,9,10 ,… num
が順番に入り、1+2+3+..... で合計を出しているだけですので実際に式に直すとわかりやすいです
まとめ|pythonの関数に関しての応用編
以上Pythonの関数に関して解説しました。
関数はPythonのキモになりますので、少し難しい箇所がありますがしっかりと理解する事が重要です。