Pythonの関数(def)は、繰り返し使う処理をひとまとまりにして名前を付ける仕組みです。
本記事では、Python初心者の方に向けて、関数の定義と呼び出しの基本だけに絞り、コロン(:)とインデント、名前の付け方(snake_case)、そしてprintでの動作確認方法までを丁寧に解説します。
引数や戻り値などの発展要素は別の記事で扱います。
Pythonの関数(def)とは
処理をまとめて再利用する仕組み
プログラムを書いていると、同じ出力や同じ前処理を何度も書くことがあります。
関数は、そのような繰り返しを1カ所にまとめて名前を付け、必要なときに呼び出せるようにする仕組みです。
重複を減らし、同じ処理を1つの名前にまとめることで、コードの見通しが良くなります。
同じ処理をすっきり書くメリット
関数化の主なメリットは次の通りです。
まず、可読性の向上です。
関数名が処理の意図を表すため、コードを読むだけで何をしているかが伝わりやすくなります。
次に、保守性の向上です。
処理を変更したい場合、1カ所を修正するだけで全体に反映されます。
最後に、再利用性です。
同じ処理を別の場所でも簡単に呼び出せます。
「一度書いて何度も使う」のが関数の狙いです。
defの書き方(基本の構文)
defとコロン(:)とインデント
関数は、def
キーワード、関数名、丸括弧、コロン、そしてインデントされたブロックで構成されます。
Pythonではインデント(字下げ)が文法の一部です。
一般的には半角スペース4つでそろえます。
# 基本の関数定義。ここでは「こんにちは」と表示する処理をまとめています。
def greet():
# これが関数の本体。コロン(:)の次の行からインデントして書きます。
print("こんにちは")
関数を「定義」しただけでは何も起きません。
呼び出してはじめて動きます。
コロン(:)とインデントは絶対に欠かさないようにしてください。
下の表は、関数定義の各要素と役割の対応です。
要素 | 記述例 | 役割 |
---|---|---|
def | def | 関数定義の始まりを示すキーワード |
関数名 | greet | 関数に付ける名前(snake_case) |
丸括弧 | () | 引数を入れる場所(本記事では未使用) |
コロン | : | ここからブロックが始まる合図 |
本体 | 改行+インデント | 関数の中身(処理を書く) |
関数名の付け方(snake_case)
Pythonの関数名は、snake_case(スネークケース)が基本です。
すべて小文字で、単語の区切りにアンダースコア(_
)を使います。
- 良い例:
print_message
、show_menu
、calculate_total
- 悪い例:
PrintMessage
(CamelCaseはクラス名向け)、show-Menu
(ハイフン不可)、2nd_try
(先頭に数字不可)
# 良い関数名の例
def show_menu():
print("=== メニュー ===")
# 悪い関数名の例(実際に使わないでください)
# def ShowMenu(): # クラス風の命名。関数では避ける
# def show-menu(): # 構文エラー。ハイフンは使えない
# def 2nd_try(): # 構文エラー。先頭に数字は使えない
命名では、関数が「何をするか」が一読して分かる表現を選ぶのが大切です。
動詞から始めると意図が伝わりやすいです(例: get_user
、save_file
)。
最初はprintで動きを確認する
最初は、関数内でprint
を使って「呼ばれたこと」が分かるようにすると理解が早いです。
# あいさつを表示する関数を定義
def greet():
print("こんにちは、Python!")
# 関数を呼び出す(実行する)
greet()
こんにちは、Python!
定義しただけでは動かない点に注意してください。
必ず「呼び出し」を書きます。
関数の使い方(呼び出しと再利用)
定義してから呼び出す流れ
関数は、ファイルの上の方で定義し、その後で呼び出すのが基本です。
定義より前に呼ぶとエラーになります(詳しくは後述)。
# 1. 定義
def show_title():
print("=== アプリのタイトル ===")
# 2. 呼び出し
print("起動します...")
show_title() # ここで関数の中身が実行される
print("準備完了")
起動します...
=== アプリのタイトル ===
準備完了
このように、共通の前置きや区切りの表示を関数にしておくと、どこからでも同じ見た目で使えるようになります。
複数回呼び出してコードを短くする
関数を使わないと、同じ3行を何度も書くことになります。
関数にまとめると、見通しが良くなり変更も容易です。
# 関数なしの例: 同じ3行を繰り返し書いている
print("-----")
print("処理Aを開始")
print("-----")
print("-----")
print("処理Bを開始")
print("-----")
-----
処理Aを開始
-----
-----
処理Bを開始
-----
# 関数ありの例: 枠線の出力を関数にまとめて再利用
def show_border():
print("-----")
print("処理Aを開始")
show_border()
print("処理Bを開始")
show_border()
処理Aを開始
-----
処理Bを開始
-----
どちらも同じ見た目を実現していますが、関数化の方が「枠線の出力」を1カ所に集約できています。
デザインを変えたいときはshow_border
だけを修正すれば全体に反映されます。
初心者がつまずきやすいポイント
定義より前に呼ぶとエラーになる
Pythonは上から順に実行します。
次のコードは、関数を定義する前に呼び出しているためエラーになります。
# まだ定義されていないのに呼び出してしまっている
greet()
def greet():
print("こんにちは")
Traceback (most recent call last):
File "sample.py", line 2, in <module>
greet()
NameError: name 'greet' is not defined
修正はシンプルで、関数の定義を呼び出しより前に置くだけです。
def greet():
print("こんにちは")
greet() # これならOK
こんにちは
インデントとコロン(:)の抜けに注意
関数定義では:
とインデントの両方が必須です。
どちらかが欠けるとSyntaxError
やIndentationError
になります。
# 悪い例1: コロンがない(構文エラー)
def greet()
print("こんにちは")
File "sample.py", line 2
def greet()
^
SyntaxError: expected ':'
# 悪い例2: インデントがない(字下げエラー)
def greet():
print("こんにちは")
File "sample.py", line 3
print("こんにちは")
^
IndentationError: expected an indented block after function definition on line 2
# 正しい例: コロン(:)とインデント(スペース4つ)をそろえる
def greet():
print("こんにちは") # ← インデントが付いている
関数の中身が1行でも、必ずインデントして「関数の内側」に書くことを意識してください。
形だけ用意するならpassを使う
設計の途中で、関数の形だけ先に作っておきたい場合があります。
そのときはpass
を使うと「何もしない関数」を定義できます。
def todo_feature():
# まだ実装していないけれど、形だけ用意したい
pass
print("Start")
todo_feature() # 何も起きない(エラーにもならない)
print("End")
Start
End
あとで中身を実装する前提で、一時的にエラーを避けたいときに便利です。
まとめ
本記事では、Python初心者向けに関数(def)の基本を解説しました。
要点は次の通りです。
関数は処理をひとかたまりにして再利用するための仕組みで、def 関数名():
の形で定義し、コロン(:)とインデントが必須です。
関数は定義後に呼び出して初めて動作し、同じ処理を何度も書かずに済むため読みやすさと保守性が向上します。
命名はsnake_caseで分かりやすく、未実装の間はpass
で形だけ用意できます。
なお、引数や戻り値、スコープ、モジュール化などの発展トピックは別の記事で扱います。
まずは本記事の内容を実践し、「定義してから呼び出す」「printで動作を確認する」という基本パターンをしっかり身につけてください。