関数はプログラムを整理し、再利用性を高める重要な仕組みです。この記事では、
def を使った関数定義の基本から、
引数・戻り値・デフォルト引数・スコープまで、初心者向けにやさしく解説します。
コピペで動くサンプルと練習問題付き。
1. 関数とは?
関数は「名前付きの処理ブロック」です。何度も使う処理をまとめておくことで、コードが読みやすく、保守しやすくなります。
例:同じ計算を何度も書かずに、関数名を呼び出すだけで処理できる。
2. 関数の定義(基本)
関数は def 関数名(引数): の形で定義します。定義後、関数名() で呼び出します。
# 基本形
def hello():
print("Hello, Python!")
hello() # 呼び出し
出力:
Hello, Python!
3. 引数(位置引数・キーワード引数)
関数に値を渡す方法には位置引数とキーワード引数があります。
位置引数
def add(a, b):
print(a + b)
add(2, 3) # 5
キーワード引数
def greet(name, message):
print(f"{name}さん、{message}")
greet(name="太郎", message="こんにちは")
4. デフォルト引数と可変長引数
デフォルト引数
def greet(name="ゲスト"):
print(f"ようこそ、{name}さん!")
greet() # デフォルトを使う
greet("花子") # 引数を渡す
可変長引数(*args, **kwargs)
def func(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
func(1, 2, a=3, b=4)
出力:
args: (1, 2)
kwargs: {'a': 3, 'b': 4}
5. 戻り値(return)の使い方
関数は結果を返すことができます。return で値を返し、呼び出し側で受け取ります。
def square(x):
return x * x
result = square(5)
print(result) # 25
注意:return がない関数は None を返します。
6. 変数のスコープ(localとglobal)
関数内で定義した変数は基本的にローカル(その関数の中だけで有効)です。外側の変数を変更したい場合は注意が必要です。
x = 10
def foo():
x = 5 # これはローカル変数
print("inside:", x)
foo()
print("outside:", x)
出力:
inside: 5
outside: 10
どうしてもグローバル変数を関数内で変更したい場合は global を使いますが、可読性が下がるので注意。
7. lambda(無名関数)とは
短い関数をその場で作るときに使います。通常は def を使う方が分かりやすいですが、簡単な処理のときに便利です。
# lambda の例
square = lambda x: x * x
print(square(4)) # 16
# map と組み合わせる例
nums = [1, 2, 3]
squared = list(map(lambda x: x*x, nums))
print(squared) # [1, 4, 9]
8. 練習問題(解答付き)
問題1
引数で受け取った数値のリストの合計を返す関数 sum_list を作ってください。
解答(クリックで表示)
def sum_list(nums):
total = 0
for n in nums:
total += n
return total
print(sum_list([1,2,3,4])) # 10
問題2
2つの引数(名前と年齢)を受け取り、挨拶文を返す関数を作ってください(年齢はデフォルトで0にする)。
解答(クリックで表示)
def greet(name, age=0):
return f"{name}さんは{age}歳です"
print(greet("太郎", 30)) # 太郎さんは30歳です
print(greet("花子")) # 花子さんは0歳です
9. まとめと次に読む記事
ポイントまとめ:
defで関数を定義する- 引数は位置引数・キーワード引数・デフォルト引数・可変長引数がある
returnで結果を返す- スコープに注意(ローカルとグローバル)
関連記事:
- 【初心者向け】Pythonのif文の使い方をわかりやすく解説
- 【初心者向け】Pythonのfor文の使い方をわかりやすく解説!
- 【初心者向け】Pythonでリストを使った繰り返し処理
- (上級)引数のアンパッキング・クロージャー・デコレータ入門
気に入ったらシェア・コメントお願いします!さらに練習問題や「デコレータ」「クロージャー」などの発展トピックも解説できます。依頼があれば記事化します。