Pythonのdefを使ってユーザー(独自の)定義の関数について、作成する方法をまとめました。
Pythonの関数とは「何らかの入力値を受け取り、関数(命令)を実行し、入力値に対応した何らかの出力値を返す」です。Pythonの関数には大きく分けて2つあります。
1) 最初から用意されている関数(組み込み関数)
2) 自分で定義した関数(ユーザー定義関数:def)
3) モジュールを組み込み(インポート)してから利用する関数
1)の組み込み関数についても別の記事にまとめていますので、ぜひご覧ください(組み込み関数の記事は、それぞれの関数について、それぞれ1つの記事になっており、数が多いためリンクが貼れていません。ご容赦ください)。3)については、importの記事でまとめています。
defとは
Python公式ドキュメントでは、次のように説明書きがあります。
def は関数の 定義 (definition) を導くキーワードです。 def の後には、関数名と仮引数を丸括弧で囲んだリストを続けなければなりません。関数の実体を構成する実行文は次の行から始め、インデントされていなければなりません。
…正直これだけでは理解できなかったです。実際に例を見ながら確認していきます。
defの基本の形
defで関数を定義する場合、次のように作ります。
def 関数名(引数):
関数定義
ポイントとしては、次の6つがあります。

① defで書き始め、その後に半角スペースを1つ書きます。
② 関数名を書きます。ここは自身の好きな名前をつけることができます。ただし、変数名のルールのようにルールがあります。
1.最初の1文字目は数字が使えない(エラーが出ます)。英文字、「_(アンダーバー)」、日本語が入力できる
2.2文字目以降は英文字、数字、「_(アンダーバー)」、日本語が入力できます。また、スペースは使えないので、2つの単語を関数名に使いたい場合は「_(アンダーバー)」で繋ぎます。
③ 関数の引数を1つの場合、複数の場合、全くない場合を決めることができます(詳細は後述します)。
冒頭で、関数とは「何らかの入力値を受け取り、入力値に対応した何らかの出力値を返すもの」と背説明しましたが、この「何らかの入力値」の事を引数といいます。また「何らかの出力値」の事を返り値、戻り値などといいます。
④ if文などと同様、複合文になるので、半角コロンをつけます。
⑤ if文などと同様、複合文になるので、スペース4つ入れてインデントします。(defのブロックが明示されます。)
⑥ 定義する関数について記載します。
これで独自の関数を定義することができます。呼び出し方法は他の関数のように関数名()として実行すればOKです。
例として、money()関数を定義して、呼び出しています。また、その出力値をprint()関数で出力しています。
def money(period):
return 100*1.07**period
a = money(1)
print(a)
【実行結果】
107.0引数の違いによる関数の定義
関数を定義する時に引数は任意の数を指定する事ができます。
引数を1つ持つ関数のdef
例えば、100万円を投資して、7%の利率(複利)がある場合、「x年目にはどうなっているだろう」と言うような時は、次のようなmoney関数を定義していると楽に計算結果を出すことができます。
def money(period):
return 100*1.07**period
a = money(1)
b = money(2)
c = money(10)
print(a)
print(b)
print(c)
【実行結果】
107.0
114.4900001
196.7151373ここで、returnは定義した関数の戻り値(入力値に対する出力値)を定義しています。今回の場合、100万円を投資し、年利7%で運用するので、period年目のお金は100×1.07^xperiodとなります。
引数を複数持つ関数のdef
毎月amount万円投資し、年利7%(複利)で運用している場合、period年目の投資結果は次のように関数を定義すると簡単に計算することができます。引数を2つ(複数)設定する必要がある場合、各引数をカンマで区切ります。
def money(period,amount):
return 12*amount*period*1.07**period
a = money(1,1)
b = money(1,2)
c = money(5,1)
d = money(5,2)
e = money(10,1)
f = money(10,2)
print(a,b,c,d,e,f)
【実行結果】
12.84 25.68 84.15 168.31 236.06 472.11上記の結果を表にまとめると次のようになります。
| 投資結果 | 毎月1万円投資 | 毎月2万円投資 |
| 1年目 | 12.84万円 | 25.68万円 |
| 5年目 | 84.15万円 | 168.31万円 |
| 10年目 | 236.06万円 | 472.11万円 |
スッキリしたコードではありませんので、下記記事でfor文を用いてスッキリさせています。

引数を3つもつ場合
毎月amount万円投資し、年利rate%(複利)で運用している場合、period年目の投資結果は次のように関数を定義すると簡単に計算することができます。引数を3つ(複数)設定する必要がある場合、各引数をカンマで区切ります。
def money(period,amount,rate):
'''
毎月amount万円、年利rate%(複利)、period年目の投資結果
'''
return 12*amount*period*(1+rate/100)**period
a = money(1,1,7)
b = money(5,1,7)
c = money(10,1,7)
print(a,b,c)
【実行結果】
12.84 84.15 236.06先程と同様の結果を得ることができました。
このように引数が4つ以上になる場合も、
def 関数名(引数1、引数2、引数3・・・・引数n):
関数の定義
と引数間をカンマで区切っていけば大丈夫です。
また、今回の定義では定義の説明文を書きました。シングルクォーテーションで囲まれた部分(2行目~4行目の部分)です。これは、他の人が見てもわかりやすいように(後で自分が見返してもすぐ理解できるように)書く場合があります。こういった文をdocstring(ドキュメンテーション文字列)といいます。docstringとはdocumentとstringの略です。
また、引数にはデフォルト値を設定することができます。
引数がない場合
引数を設定しない事もできます。引数を設定しない場合はカッコの中に何も書きません。
def money():
return 100*1.07
h = money()
print(h)
【実行結果】
107.0戻り値をもたない関数の場合
関数の「入力値に対する何らかの出力値」の事を返り値、戻り値などといいますが、defでの関数では出力値を持たない関数を定義することもできます。
定義の仕方は簡単でreturnがなければOKです。ただし、returnがない関数はNoneを返します。
def money():
l = 100 + 7
m = money()
print(m)
【実行結果】
None*
*
*
今回の記事で紹介しきれなかったdef文の引数のデフォルト値設定の記事もありますので、ご覧ください。



コメント