関数を作成する方法
関数作成時の構文
Pythonで関数を作成する場合にはdef文を使います。defは「定義する」という意味の「define」の略です。
関数を作成する際の基本的な構文は以下になります。
1 2 3 |
def 関数名(引数): 関数内の処理 return 戻り値 |
関数名
関数名は一般的には英字の小文字の単語と単語の間をアンダースコアでつなげて書きます。
「例:check_binary_format、create_source_file」
関数名を見れば内部処理の概要が分かるような命名が望ましいですが、なかなかそうもいかない場合も多々ありますので、どういう名前が適切なのかを検討してみてください。
引数(ひきすう)
引数とは関数に渡す値を指します。引数は1つだけでなく複数設定することが可能です。また、引数がない関数を作成することも可能です。
引数は括弧()の中に書き、右端にコロン(:)を付けて書きます。
例えば、plusという名前の関数があったとして、このplus関数は渡された値xに1を足してprint関数で出力する機能があるとします。このときの「渡された値x」が引数に当たります。
実際の関数として作成すると以下のようなコードになります。引数xは括弧の中に書きます。
1 2 |
def plus(x): print(x + 1) |
引数には4種類の書き方による使い分けがあります。
- 関数に必ず渡さなければならないデータ(通常の引数)
- 省略した場合に初期値が適用される引数(デフォルト引数)
- 引数の数が未確定の引数(可変長引数と呼ばれます)
- キーと値の組み合わせを複数持つ引数(辞書引数)
上のサンプルコードの引数は通常の引数になります。
4種類の引数のうち、実際のプログラムでは大多数の関数が通常の引数で作成され、特殊なことを行いたい場合に他の3種類を利用します。
また、引数には関数の処理内で値が変更されると、関数の呼び出し元でも値が変わった状態を引き継ぐものとそうでないもの(呼び出し時から値が変わらないもの)があります。
ここでは、一般的に一番使用される、通常の引数で単純に関数の内部の処理で使うために渡す値としての引数について説明します。
関数内の処理
関数の中の処理はdef文の次の行からインデントを下げて書きます。処理が複数行ある場合も同様です。
インデントがdef文とおなじ位置になると、関数ブロックでなくなります。
1 2 3 4 5 6 |
def sub(): i = 1 print(i) def sub2(): i = 1 print(i) |
1つ目の関数のsub()は3行目のprint文までが関数ブロックで、インデントが戻った4行目からは別のブロックになります。
戻り値(もどりち)
関数の処理の結果を呼び元に返したい場合があります。
その場合にはreturn文を使って値を返します。
return文により戻り値がある関数を呼び出す場合には、return文によって返される値を受け取る変数を用意するか、戻り値をそのまま判定する条件文などでなければいけません。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 戻り値がある関数を用意 def ret1(): return 3 # 関数を呼び出して変数に戻り値を代入 r = ret1() print(r) # 条件文で戻り値を直接判定 if ret1() > 2: print("over") else: print("under") |
実行結果
3
over
なお、return文がない関数を変数に代入した場合、戻り値がないためその変数には、何も値がないことを意味する値の「None」がセットされます。
1 2 3 4 5 |
def sub3(): i = 1 a = sub3() print(a) |
実行結果
None
自作関数の使い方
自分で作成した関数の使い方は標準で用意されている関数と同じで、print関数などと同じように使うことが出来ます。
ただし1つだけPythonの標準関数と異なる点があります。それは、プログラムは上から順に処理されていくため、より上の行に自作関数を書いて、それより下の行で自作関数を呼び出すようにしなければなりません。
まだ自作関数が書いてある行に達してないのに、その自作関数を呼び出すコードを書くと、関数が定義されていないと判断されエラーになります。
そのため、以下のコードのように必ず関数を定義して、そのあとで関数を呼び出すようにします。
1 2 3 4 5 6 7 |
# 先にdef文を使って関数を作成する def sub111(x, y): return x + y # 関数を呼び出して引数を渡し、戻り値を変数で受け取る xy = sub111(1, 2) print(xy) |
実行結果
3