関数とは?:def文の基本#
はじめに#
今回からは、Pythonプログラミングをさらに効率的にするための「関数」について学んでいきましょう。
関数は、プログラミングの中で最も重要な概念の一つです。特に大きなプログラムになればなるほど、関数の役割は重要になります。この記事では、関数の基本的な考え方と、Pythonでの関数の定義方法について学びます。
関数とは?#
関数とは、一連の処理をひとまとめにして名前を付け、必要なときに呼び出せるようにしたものです。これまでに使ってきたprint()
やlen()
なども関数です。
関数を使うと次のようなメリットがあります。
- コードの再利用: 同じ処理を何度も書く代わりに、一度定義した関数を何度でも呼び出せます
- コードの整理: 処理をまとまりごとに分けることで、プログラム全体が整理されます
- バグ修正の容易さ: プログラムに問題が発生したときに、関数単位で確認できるため、問題箇所を特定しやすくなります
- チーム開発の効率化: 機能ごとに担当者を分けて開発できます
関数の基本構造#
Pythonでは、def
キーワードを使って関数を定義します。基本的な構造は次のとおりです。
def 関数名(引数1, 引数2, ...):
処理内容
return 戻り値
引数と戻り値は省略することもできます。それぞれ次回詳しく説明します。
それでは、具体的な例を見ていきましょう。次のコードを実行してみてください。
# シンプルな関数の定義
def greet():
print("こんにちは!関数の世界へようこそ。")
# 関数の呼び出し
greet()
こんにちは!関数の世界へようこそ。
この例では、greet()
という名前の関数を定義しています。この関数は呼び出されると、メッセージを表示します。関数を定義しただけでは処理は実行されず、greet()
のように関数名と括弧を使って呼び出すことで、関数内の処理が実行されます。
関数の命名規則#
関数名の付け方にはいくつかのルールがあります。
- 使える文字:
- アルファベット(A-Z, a-z)
- 数字(0-9)
- ただし、数字で始めることはできない
- アンダースコア(_)
- 日本語も使えるが、英語を使うことが一般的
- 命名スタイル:
- Pythonでは、「スネークケース」(単語をアンダースコア
_
でつなぐ方式)が一般的 - 例:
calculate_area
,print_summary
,get_user_data
- Pythonでは、「スネークケース」(単語をアンダースコア
- 命名の意味:
- 関数名は、その関数が何をするのかを明確に示す動詞を使うことが一般的
- 例:
calculate_...
,get_...
,print_...
,update_...
適切な関数名を付けることで、コードの可読性(読みやすさ)と保守性(メンテナンスのしやすさ)が向上します。
# 良い関数名の例
def calculate_total_price(price, quantity, tax_rate):
return price * quantity * (1 + tax_rate)
# 避けるべき関数名の例
def func1(p, q, t): # 短すぎて何をする関数か分かりにくい
return p * q * (1 + t)
インデントの重要性#
Pythonの関数定義では、インデント(字下げ)が非常に重要です。関数内のすべてのコードは、同じレベル(スペースの数)でインデントされている必要があります。
# 正しいインデント
def example_function():
print("これは関数内の処理です。")
print("この行も関数内です。")
print("この行は関数の外です。")
インデントはif文などと同様に半角スペース4つを使用することが多いです。Pythonでは、このインデントによってコードブロック(関数の範囲など)を判断するため、適切なインデントは非常に重要です。
実用的な関数の例#
より実用的な関数の例をいくつか見てみましょう。
import datetime
import random
# 引数なしの関数 - 現在の日付を表示する
def show_today():
today = datetime.datetime.now()
print(f"今日の日付: {today.year}年{today.month}月{today.day}日")
# 引数なしの関数 - ランダムな数を生成する
def generate_random_number():
return random.randint(1, 100)
# 関数を使ってみる
show_today() # 引数なしの関数を呼び出し
random_num = generate_random_number() # 戻り値がある引数なしの関数
print(f"生成された乱数: {random_num}")
random_num = generate_random_number() # 再度呼び出し
print(f"再度生成された乱数: {random_num}")
実行結果(日付と乱数は実行時によって異なります):
今日の日付: 2025年5月1日
生成された乱数: 42
再度生成された乱数: 87
datatimeモジュールは日付や時間を扱うためのモジュールで、randomモジュールは乱数(ランダムな数)を生成するためのモジュールです。以前に紹介したmathモジュールと同様に、Pythonの標準ライブラリに含まれています。
作成した関数は、必要なときに何度でも呼び出すことができます。これにより、同じ処理を何度も書く必要がなくなり、コードがすっきりします。
まとめ#
この記事では、関数の基本について学びました。
- 関数とは、一連の処理をひとまとめにして名前を付け、必要なときに呼び出せるようにしたもの
def
キーワードを使って関数を定義する- 適切な命名とインデントが重要
関数は、コードの再利用性、保守性、可読性を高める上で非常に重要な概念です。小さな関数から始めて、徐々に複雑な関数にチャレンジしていくと良いでしょう。