Pythonで関数を定義する方法、定義した関数を呼び出す方法(関数を実行する方法)を解説します。

関数の定義方法(記述方法)だけであれば決して難しくはないのですが、やはり引数や戻り値と言った基本的なプログラミング知識がないと実践的に利用することは難しいかもしれません。
このページでは、関数とはそもそも何か?引数って?戻り値って何?という前提となる知識から初心者向けに易しめに解説します。
Pythonエンジニアを目指す方や、Pythonをマスターしようとしている方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。
【前提】関数とは何か?

前提となる「関数」とは何か?を解説しています。そんなの分かっているよ・・という方は読み飛ばしでOKです。
関数とはインプットされた値をもとに、決められた処理を実行してくれるプログラムの部品です。
プログラムをコーディングしていくと、同じような処理を複数回実行する必要がある場合あります。例えば、入力された値のチェックや、毎回同じように行う必要がある計算式など。

何度も繰り返す必要があるような処理を予め部品化しておいて、何度も呼び出す形で利用することができれば便利です。これが関数です。関数をうまく使いこなすことができると、コード全体の「構造化」が図れ効率的なプログラミングが可能となります。


もちろん、関数を使わなくてもプログラミング自体は可能ですが、事実上関数なしで一つの機能を作り上げるのは事実上不可能です。
Pythonではdef文を用いて関数を定義します。
以下の記事で、関数とは何か?関数を利用するとどんな良いことがあるのか?をプログラミング初心者向けに分かりまやすく解説しています。
def文:関数の基本

関数(def)は大きく「①定義」と「②実行」で分けて考えると直感的に理解しやすくなります。

まずは、「①定義」方法―。関数を作る方法から解説します。
関数の定義:def
def文で関数の定義を行います。構文ルールは以下の通り。
def 関数名(引数1, 引数2, 引数3,・・・): 処理内容1 処理内容2 ・・・・ return 戻り値
引数や戻り値は必須ではありません。引数や戻り値が存在しない関数も存在します。その場合、以下のように非常にシンプルな形で記述されます。
def 関数名(): 処理内容1 処理内容2 ・・・・
尚、def文は1つのブロックを構成します。そのため、インデント(字下げ)をすべて合わせる必要があります。インデントを適切にしてあげないと構文エラーになるか、思わぬ動きにつながる場合があるため注意が必要です。
またdef文では( )の後ろに:が必要となる点も注意して覚えておきましょう。
インデントとは、字下げのこと。
print "Hello" # 普通の行 print "Hello" # インデントした行

Pythonにおいては、プログラムのブロックを表す重要な内容です!インデントって何?と疑問に思った方は以下のページでPythonの基本文法をチェックしましょう。
関数の実行方法

def文で定義した関数を、今度は実行するときの書き方です。
def文で定義した関数は、関数名と引数を指定するだけで実行可能です。
# 関数の定義 def 関数名(引数1, 引数2, 引数3,・・・): 処理内容1・・・・ 処理内容2・・・・ return 戻り値 # 関数の実行 関数名(引数1,引数2,引数3,・・・)
関数を変数に代入する形で呼び出すことも可能です。
# 関数の定義 def 関数名(引数1, 引数2, 引数3,・・・): 処理内容1 処理内容2・・・・ return 戻り値 # 関数の実行 変数 = 関数名(引数1,引数2,引数3,・・・)
どちらも結果は全く同じになります。

まだ少しピンと来ていない方も大丈夫です。
ここから、いくつかサンプルコードを紹介していきますでの、少しずつイメージを掴んでいきましょう。
サンプルコード:def文
# 関数の定義 def fun1(): print("初めての関数") # 関数の実行 fun1() # 結果 ⇒ 初めての関数
引数・戻り値なしの簡素な関数定義とその実行を行うサンプルコードです。
以下のように変数に代入する形で呼び出しても同様の処理が行われます。
def func1 (): print("初めての関数") a = func1() # 結果 ⇒ 初めての関数
Python:関数の命名ルールについて
関数の命名ルールは、変数の命名ルールと基本的に同じです。
ただし、関数の先頭に数字を用いるのはNGです。エラー(SyntaxError: invalid syntax)となりますので、注意が必要です。

この点も変数の命名ルールと同じですね。
Pythonの変数宣言を復習したい方はこちらの記事からどうぞ!
関数の「引数」と「戻り値」
関数の「引数」と「戻り値」について改めて解説しておきます。
初心者の方は混乱しがちですが、実は考え方は非常に単純。
引数
⇒関数に渡す値―関数へのインプット情報
戻り値
⇒関数から返される値―アウトプット情報

引数・戻り値についても実際のサンプルコードを見ながらイメージを深めましょう。
サンプルコード:引数と戻り値
def add_func(a,b): # 関数「add_func」 引数⇒a/b return a + b a = add_func(2,9) # 関数の実行 print(a) # 結果の表示
画面には「11」が表示されます。
どのようにして、画面に「11」が表示されるか?一つひとつ順に追って考えていきましょう。
def add_func(a, b): return a + b
2つの引数 "a" "b" を定義します。この "a" と "b" が関数へ渡されます(インプット)。
"a" と "b" を足した値をreturn-戻り値として定義(アウトプット)。
a = add_func(2, 9)
関数へ実際に渡す値を、「(2, 9)」として指定します。引き渡す順番通りに記述すればOK。

a = add_func(2, 9) # aには11が入る # aの値を画面出力 print(a)
戻り値(アウトプット)には「11」が設定されており、この戻り値は直接変数に代入が可能です。
defで定義した引数と、実際に受け渡す値の数が異なる場合「TypeError」が発生します。

また、aという変数を使わずにちょっとカッコよく書くこともできます。
こちらの書き方も一緒に理解しておきましょう!
def add_func(a,b): # 関数「add_func」 引数⇒a/b return a + b print(add_func(2,9))
引数に渡す値を「引数名」で指定する方法
先ほど解説した通り、引数は定義した順番で渡すのが原則です。
ただし、どの引数にどの値を渡すのか?を明示的に指定することも可能。
def add_func(a, b): return a + b answer = add_func(b=9, a=2,) print(answer)
この例では、「answer = add_func(b=9, a=2,)」としています。
すなわち、引数"b" には「9」を。引数"a" には「2」を渡していることになります。
複数の戻り値を設定する方法
戻り値を複数個指定することも可能です。以下のように「,(カンマ)」で複数個の戻り値を指定するだけ。
ただし、def文の中における "return" は1つだけなので、戻り値はタプルで返ってきます。
def calc_func(a, b): return a+b, a-b , a*b , a/b answer = calc_func(2, 8,) print(answer) #結果 (10, -6, 16, 0.25)
基本的には、中身の要素が変更できない配列と考えてOK。

配列(リスト)・タプル等のPython基本データ構造について詳しく知りたい方は、こちらのページをご覧ください。
デフォルト引数を定義する方法
引数には、デフォルト値を設定することができます。

つまり、引数に何も渡されなかった場合に設定される値を事前に定義することが可能。
def sample(name="田中"): print(name) sample() # 引数指定なし⇒なので、デフォルトの「田中」が入る。 sample("鈴木") # 引数に「鈴木」を指定 # 田中 # 鈴木
ご覧の通り、引数が指定されなかった場合には、デフォルトの引数が設定されています。
そのため、デフォルト値を設定した引数には値を渡す必要がありません。値を渡さなくてもデフォルト値が設定されるため、構文エラーにはならないのです。

引数にデフォルト値を設定する方法は結構便利なので是非覚えておきましょう。
尚、デフォルト引数とデフォルト値を持たない引数を同時に定義する場合にはちょっとだけ注意が必要。デフォルト引数は必ず最後の引数にする必要があります。
def sample(age, name="田中"): print(name,age) sample("10歳") # 引数指定なし sample("20歳","鈴木") # 引数に「鈴木」を指定 # 田中 10歳 # 鈴木 20歳
もし、逆にすると構文エラーが発生します。
def sample(name="田中",age): print(name,age) sample("10歳") # 引数指定なし sample("20歳","鈴木") # 引数に「鈴木」を指定 # SyntaxError: non-default argument follows default argument
可変長引数
関数のパラメータを定義する際に、引数に「*(アスタリスク)」を1つ、もしくは2つつけることで任意の数の引数を指定することができるようになります。
def func1(*args): print(args) func1(1, 2, 3, 4, 5) # 結果 ⇒ (1, 2, 3, 4, 5)
可変長引数については、初心者の方にとって少し躓きやすい部分でもあるので、こちらは以下のページで詳細に説明しています。是非ご覧ください。
ローカル変数とグローバル変数

ここまでで基本の理解はOK。
最後にもう1つだけ合わせて覚えておきたいのが、ローカル変数とグローバル変数についての知識です。
ローカル変数とは、関数の中で定義されている変数のこと。グローバル変数とは、関数外で定義されている変数のことです。
両者は以下のように変数のスコープが異なるため、頭に入れておかないと思わぬエラーを引き起こすことになります。
ローカル変数
変数を宣言した関数内でのみ有効(利用可能)
グローバル変数
プログラム内のどこでも有効(利用可能)
a = 1 # グローバル変数 def sample(): a = 1000 # ローカル変数 print(a) print(a) # 1
a = 1 # グローバル変数 def sample1(): b = 1000 # ローカル変数 print(a) print(b) # NameError: name 'b' is not defined
ローカル変数とグローバル変数の違いについては、下記ページで詳しく解説しておりまので、この機会に合わせて学んでおきましょう。
Pythonを1から学習したい方は
Pythonをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。
そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。
各プログラミングスクールの特徴をまとめた記事をこちらに記載しておきますので、是非ご覧ください。