本ページでは、Pythonで関数を定義する方法、及び関数を呼び出す方法(関数を実行する方法)を解説します。
関数の定義方法(記述方法)だけであれば決して難しくはないのですが、やはり引数や戻り値と言った基本的なプログラミング知識がないと実践的に利用すること困難。
このページでは、関数とはそもそも何か?引数って?戻り値って何?という前提となる知識から初心者向けに易しめに解説します。
Pythonエンジニアや、Pythonで1から自動化ツールを作ろうとしている方であれば知らないと恥ずかしい基本知識ばかりです。
是非最後までご覧ください。
【前提】関数とは何か?
関数は、一言で言えば「複数の処理を1つにまとめて名前を付けたもの」と説明できます。
プログラムをコーディングしていくと、同じような処理を複数回必要とする場合がでてきます。
このようなタイミングで、当該処理を予め構造化しておいて、何度も呼び出す形で利用することができればコード全体の「構造化」が図れ効率的なプログラミングが可能となります。

Pythonでは、関数をdef文を用いて定義します。
Python:関数の基本

関数は「①定義」と「②実行」―。この2つの記述方法さえ知っていればまずはOKです。
まずは、「①定義」方法から。
関数の定義:def
def文で関数の定義を行います。構文ルールは以下の通り。
def 関数名(引数1, 引数2, 引数3,・・・): 処理内容1 処理内容2 ・・・・ return 戻り値
引数や戻り値は必須ではないため、以下のように非常にシンプルな形で記述されることもあります。
def 関数名(): 処理内容1 処理内容2 ・・・・
※引数、戻り値については後ほど詳しく解説します。
尚、def文は1つのブロックを構成します。そのため、インデント(字下げ)をすべて合わせる必要があります。
字下げを適切に行わない場合、構文エラーになるか、思わぬ動きにつながる場合があるため注意が必要です。
関数の実行方法
続いて、def文で定義した関数を実行する方法について。
def文で定義した関数は、関数名と引数を指定するだけで実行可能です。
# 関数の定義 def 関数名(引数1, 引数2, 引数3,・・・): 処理内容1 処理内容2・・・・ return 戻り値 # 関数の実行 関数名(引数1,引数2,引数3,・・・)
関数を変数に代入する形で呼び出すことも可能です。
# 関数の定義 def 関数名(引数1, 引数2, 引数3,・・・): 処理内容1 処理内容2・・・・ return 戻り値 # 関数の実行 変数 = 関数名(引数1,引数2,引数3,・・・)
どちらも結果は全く同じです。
定義方法と呼び出し方法が何となく理解できたタイミングで、早速サンプルコードを確認していきましょう。
サンプルコード:def文
def func1 (): print("初めての関数") func1() # 関数の実行 # 結果 ⇒ 初めての関数
引数・戻り値なしの簡素な関数です(実際にこのような関数を定義することはあまり多くはありません。)
もしくは、以下のように変数に代入する形で呼び出してもOK。
def func1 (): print("初めての関数") a = func1() # 結果 ⇒ 初めての関数
どちらも同じ結果が返ってきます。
Python:関数の命名ルールについて
関数の命名ルールは、変数の命名ルールと基本的に同じです。
ただし、関数の先頭に数字を用いるのはNGです。エラー(SyntaxError: invalid syntax)となりますので、注意が必要です。
この点も変数の命名ルールと同じですね。
関数の「引数」と「戻り値」
関数の「引数」と「戻り値」について解説しておきます。
初心者の方は混乱しがちですが、実は考え方は非常に単純。
引数
⇒関数に渡す値―関数へのインプット情報
戻り値
⇒関数から返される値―アウトプット情報
実際の例を見ながらイメージを深めましょう。
サンプルコード:引数と戻り値
def add_func(a,b): # 関数「add_func」 引数⇒a/b return a + b print(add_func(2,9)) # 関数の戻り値を表示
画面には「11」が表示されます。
どのようにして、画面に「11」が表示されるか?一つひとつ順に追って考えていきましょう。
def add_func(a, b): return a + b
2つの引数 "a" "b" を定義します。この "a" と "b" が関数へ渡されます(インプット)。
"a" と "b" を足した値をreturn-戻り値として定義(アウトプット)。
add_func(2, 9)
関数へ実際に渡す値を、「(2, 9)」として指定します。引き渡す順番通りに記述すればOK。

print(add_func(2, 9))
戻り値(アウトプット)には「11」が設定されており、この戻り値は直接変数に代入が可能です。
defで定義した引数と、実際に受け渡す値の数が異なる場合「TypeError」が発生します。
引数に渡す値を「引数名」で指定する方法
先ほど解説した通り、引数は定義した順番で渡すのが原則です。
ただし、どの引数にどの値を渡すのか?を明示的に指定することも可能。
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)
可変長引数については、初心者の方にとって少し躓きやすい部分でもあるので、こちらは以下のページで詳細に説明しています。是非ご覧ください。
ローカル変数とグローバル変数
合わせて覚えておきたいのが、ローカル変数とグローバル変数について。
ローカル変数とは、関数の中で定義されている変数のこと。グローバル変数とは、関数外で定義されている変数のことです。
両者は以下のように変数のスコープが異なるため、頭に入れておかないと思わぬエラーを引き起こすことになります。
ローカル変数
変数を宣言した関数内でのみ有効(利用可能)。
グローバル変数
プログラム内のどこでも有効(利用可能)。
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から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。
各プログラミングスクールの特徴をまとめた記事をこちらに記載しておきますので、是非ご覧ください。