Pythonでは、何度も実行する処理やひとまとめに行いたい処理を「関数」として定義することで、プログラムを効率よく確実に実行できます。
今回の記事では、Pythonで関数を扱う方法について詳しく解説していきたいと思います。
pythonの関数とは?
Pythonでは、関数を定義して必要に応じて呼び出すことで様々な処理や計算を行います。
関数とは、特定の処理の流れを1つの塊としてまとめたもののことを言います。
一連の処理をひとまとめにして名前を付けて管理することで、コードの再利用が簡潔にできるようになるほか、可読性や保守性を高めることができるメリットがあります。
- 再利用性の向上
- 同じ処理を何度も書く必要がなくなる。
定義した関数を呼び出すだけで、同じ処理を繰り返し実行することが可能になる。
- 同じ処理を何度も書く必要がなくなる。
- 可読性の向上
- 関数に分かりやすい名前を付けることで、コードの意図が明確になる。
複雑な処理を1つにまとめることで、プログラム全体の構造が整理されて見やすくなる。
- 関数に分かりやすい名前を付けることで、コードの意図が明確になる。
- 保守性の向上
- バグが発生した場合に、修正する箇所が関数内に限定されるため、効率よく修正できる。
関数を定義する方法を解説
関数は、大きく分けて以下の4つの形式で定義することができます。
- 引数のある関数
- 引数のない関数
- 戻り値がある関数
- 戻り値がない関数
関数の基本構文とそれぞれの定義方法について、順に見ていきましょう。
基本構文
形式ごとの記述方法を紹介する前に、関数を定義する際の基本構文を解説します。
関数は、「def」 の後に関数名を記述する形で定義を行います。
また、呼び出し時に行う処理内容はインデントを付けて記述します。これにより、直前に定義した関数のブロックとして扱うことができます。
【基本構文】
def 関数名(引数1, 引数2, ...):
# 関数で行う処理
return 戻り値
関数名は、その関数が何を処理するものであるかが大まかに把握できるよう、分かりやすい名前を付けるようにしましょう。
関数名の後ろにある括弧内には、ブロック外から値を渡したい場合に使用する引数を指定することができます。
また、関数内の処理が完了した際に渡す戻り値を、「return」 文を使用して指定することもできます。
これら2つは、引数や戻り値が必要ない場合には省略可能です。
引数・戻り値のない関数を定義する
まずは、最も簡単な形式である、引数や戻り値のない関数から紹介します。
引数の指定が必要ない場合は、関数名の後ろに () のみを記述して定義します。
また、戻り値が必要ない場合は処理内容のみを記述し、return文を記述せずにブロックを終了します。
【サンプルコード】
def sampleFunction():
print('Hello World!')
定義した関数を使用する際は、関数名と () を記述して呼び出しを行います。
sampleFunction()
関数のブロック部分に記述した処理内容が無事に実行されれば、定義は完了です。
【実行結果】
Hello World!
引数のある関数を定義する
続いて、引数のある関数を定義する方法について説明します。
関数で引数を指定する際は、関数名の後ろにある括弧の中に、引数をブロック内で使用する際の引数名を記述します。
引数を複数指定する場合は、それぞれをカンマで区切り、必要な数だけ引数名を記述します。
【サンプルコード】
def sampleFunction(num1, num2):
関数の実行時に渡された値は、括弧内に記述した名前を使用して取り出すことができます。
【サンプルコード】
def sampleFunction(num1, num2):
print(num1 + num2)
関数を呼び出す際は、括弧内に引数として渡す値を記述します。
sampleFunction(10, 5)
【実行結果】
sampleFunction(10, 5)
Pythonでは、変数や引数に対して型を宣言する必要がなく、どのような値でも代入することができる仕様となっています。
そのため、関数内の処理で想定されていない値も引数に渡すことが可能となってしまうため、記述の際には注意が必要です。
引数を指定する際は、アノテーション記法 (注釈) を使用してコードの可読性を上げたり、処理の実行前に型チェックを挟むようにすると、より安全に実行できるようになります。
※型アノテーションは Python 3.5 以降のバージョンで使用できます。
【サンプルコード】
def sampleFunction(num1:int, num2:int):
if type(num1) is int and type(num2) is int:
print(num1 * num2)
else:
print('数値以外の値が渡されています')
sampleFunction('a', 5)
【実行結果】
数値以外の値が渡されています
戻り値のある関数を定義する
続いて、戻り値のある関数を定義する方法について見ていきましょう。
関数内で行われた処理の結果をブロック外で活用したい場合は、return文を使用して戻り値を指定します。
【サンプルコード】
def sampleFunction(num1:int, num2:int):
return num1 + num2
result1 = sampleFunction(5, 5)
result2 = sampleFunction(10, sampleFunction(5, 5))
print(result1)
print(result2)
【実行結果】
10
20
戻り値として返された値は、上記のように変数に代入したり、関数の引数として渡すことができます。
なお、return文が実行された時点で関数のブロックを抜けるため、それ以降に記述した処理は実行されることなく、次の処理へと移行してしまいます。
戻り値を指定する際は、値を返すタイミングに注意が必要です。
【サンプルコード】
def sampleFunction(num1, num2):
print('合計値を表示します')
return num1 + num2
# ここから先の処理は実行されない
print('表示が完了しました')
result = sampleFunction(5, 5)
print(result)
【実行結果】
合計値を表示します
10
定義した関数の引数を使いこなす
関数の基本的な使用方法については上述の通りですが、この他にも、いくつかの応用的な方法が存在します。
ここからは、以下の3つの応用方法について解説していきたいと思います。
- キーワード引数
- デフォルト引数
- タプル・リスト
キーワード引数を指定する
応用方法の1つ目は、キーワード引数です。
キーワード引数とは、関数を呼び出す際に 「引数名=値」 の形式で引数を記述する記法のことを言います。
(反対に、値のみを定義順に記述する方法を、位置引数と言います)
以下のサンプルコードで、実際の記述方法を見てみましょう。
【サンプルコード】
def sampleFunction(num1, num2):
print(num1 + num2)
sampleFunction(num1=10, num2=5)
【実行結果】
15
このように、定義順ではなく引数名に対応して値を指定するのが、キーワード引数の記述方法です。
この方法を使用する場合、それぞれの引数を記述する順番は、定義順と異なっていても問題ありません。
【サンプルコード】
def sampleFunction(num1, num2):
print(num1 + num2)
# 順番が違っていても正常に動作する
sampleFunction(num2=5, num1=10)
また、一部の引数のみをキーワード引数で指定することもできます。
【サンプルコード】
# 以下のような書き方も可能
sampleFunction(10, num2=5)
ただし、一度キーワード引数で記述した後は、残りの全ての引数も同様にキーワード引数で指定しないとエラーになってしまうため、注意が必要です。
【サンプルコード】
def sampleFunction(num1, num2, num3):
print(num1 + num2 + num3)
# キーワード引数の後に位置引数で指定するとエラーになる
sampleFunction(10, num2=5, 10)
【実行結果】
SyntaxError: positional argument follows keyword argument
位置引数で既に指定済みの引数名を記述しても、同様にエラーが発生します。
【サンプルコード】
# 位置引数でnum1を指定済みのため、エラーになる
sampleFunction(10, num1=5, num3=10)
【実行結果】
TypeError: sampleFunction() got multiple values for argument 'num1'
デフォルト引数を指定する
応用方法の2つ目は、デフォルト引数です。
デフォルト引数とは、関数を定義する際に、引数のデフォルト値(初期値)を事前に指定する記法のことを言います。
通常、引数が必要な関数を呼び出す際に、値を省略して記述することはできませんが、デフォルト引数の場合は省略が可能となります。
デフォルト引数の値が省略された場合は、事前に指定したデフォルト値が使用されます。
【サンプルコード】
def sampleFunction(name='不明', age='不明'):
print('名前:' + name)
print('年齢:' + str(age))
sampleFunction('山田太郎')
【実行結果】
名前:山田太郎
年齢:不明
ただし、デフォルト引数を指定する場合、通常の引数より前に記述をするとエラーとなるため、注意が必要です。
【サンプルコード】
def sampleFunction(name='不明', age):
print('名前:' + name)
print('年齢:' + str(age))
sampleFunction(age=15)
【実行結果】
SyntaxError: non-default argument follows default argument
また、デフォルト値にリストや辞書を指定した場合、一度生成されたデフォルト値のオブジェクトは呼び出しごとにリセットされずそのまま再利用されるため、想定しない値となる可能性があります。
【サンプルコード】
def sampleFunction(list=[0, 0], num=10):
list.append(num)
print(list)
sampleFunction()
sampleFunction()
sampleFunction()
【実行結果】
[0, 0, 10]
[0, 0, 10, 10]
[0, 0, 10, 10, 10]
リストや辞書をデフォルト値として使用したい場合は、デフォルト引数をNoneに設定し、関数内でオブジェクトを新しく生成するようにしましょう。
【サンプルコード】
def sampleFunction(list=None, num=10):
if list is None:
list = [0, 0]
list.append(num)
print(list)
sampleFunction()
sampleFunction()
sampleFunction()
【実行結果】
[0, 0, 10]
[0, 0, 10]
[0, 0, 10]
タプル、リストを引数に指定する
応用方法の3つ目は、タプルやリストを引数に指定する方法です。
関数に引数を渡す際、タプルやリストを指定することで、オブジェクト内の各要素を引数の値として使用することができます。
以下のサンプルコードを元に、実際の動きを見てみましょう。
【サンプルコード】
def sampleFunction(english, math, science):
print('英語:' + str(english) + '点')
print('数学:' + str(math) + '点')
print('理科:' + str(science) + '点')
numList = (70, 90, 85)
sampleFunction(*numList)
【実行結果】
英語:70点
数学:90点
理科:85点
上記のように、タプルやリストを引数に渡す場合は、変数名の前にアスタリスクを付けて記述します。
辞書も同様に指定可能ですが、その場合はアスタリスクを2つ付ける必要があります。
また、辞書の場合はキーが引数名として適用されるため、定義した引数名と同じ文字列にするよう注意しましょう。
【サンプルコード】
def sampleFunction(english, math, science):
print('英語:' + str(english) + '点')
print('数学:' + str(math) + '点')
print('理科:' + str(science) + '点')
numDic = {'english': 70, 'math': 90, 'science': 85}
sampleFunction(**numDic)
まとめ
ここまで、Pythonにおける関数の基本的な使い方から、応用方法までを解説してきました。
関数はプログラミングをするうえでの要の1つとなる重要な機能なので、しっかりと使い方を覚えて活用できるようにしておきましょう。
Pythonの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、Pythonに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。