Python関数の基礎:defとlambdaの使い方完全ガイド
Pythonの関数定義(def)と無名関数(lambda)の使い方を初心者向けに解説。引数、戻り値、スコープ、高階関数の実例付き。
Pythonの関数とは?
Pythonの関数は、再利用可能なコードのブロックです。defキーワードで定義し、lambdaで簡潔な無名関数も作成できます。関数を使うことで、コードの整理、重複の削減、テストの容易さが向上します。
defによる関数定義
基本構文
def 関数名(引数リスト):
"""ドキュメンテーション文字列"""
処理
return 戻り値
実例:挨拶関数
def greet(name):
"""名前を受け取り挨拶を返す"""
return f"こんにちは、{name}さん!"
print(greet("太郎")) # 出力: こんにちは、太郎さん!
引数の種類
1. 位置引数
引数の順序が重要。
def add(a, b):
return a + b
print(add(3, 5)) # 8
2. キーワード引数
引数名を指定して渡す。順不同。
def introduce(name, age):
return f"{name}は{age}歳です"
print(introduce(age=20, name="花子")) # 花子は20歳です
3. デフォルト引数
デフォルト値を設定。
def power(base, exp=2):
return base ** exp
print(power(3)) # 9 (3^2)
print(power(3, 3)) # 27 (3^3)
4. 可変長引数
*args:タプルとして受け取る。**kwargs:辞書として受け取る。
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3, 4)) # 10
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="太郎", age=25)
戻り値
return文で値を返す。複数の値はタプルで返す。
def min_max(nums):
return min(nums), max(nums)
min_val, max_val = min_max([3, 1, 4, 1, 5])
print(min_val, max_val) # 1 5
戻り値がない場合はNoneが返る。
スコープと変数の有効範囲
global宣言が必要。x = 10 # グローバル変数
def func():
global x
x = 20
func()
print(x) # 20
lambda(ラムダ式)
無名関数を簡潔に書く。
基本構文
lambda 引数: 式
例
<h1>通常の関数</h1>
def add(a, b):
return a + b
<h1>lambda</h1>
add_lambda = lambda a, b: a + b
print(add_lambda(3, 5)) # 8
高階関数での利用
map、filter、sortedなどと組み合わせて使う。
<h1>map: 各要素を2倍</h1>
nums = [1, 2, 3, 4]
doubled = list(map(lambda x: x * 2, nums))
print(doubled) # [2, 4, 6, 8]
<h1>filter: 偶数だけ抽出</h1>
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2, 4]
<h1>sorted: タプルの2番目の要素でソート</h1>
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
sorted_pairs = sorted(pairs, key=lambda pair: pair[1])
print(sorted_pairs) # [(1, 'one'), (3, 'three'), (2, 'two')]
高階関数とデコレータ
関数を引数にとる、または関数を返す関数。
簡単なデコレータ
def decorator(func):
def wrapper():
print("関数実行前")
func()
print("関数実行後")
return wrapper
@decorator
def hello():
print("Hello!")
hello()
<h1>出力:</h1>
<h1>関数実行前</h1>
<h1>Hello!</h1>
<h1>関数実行後</h1>
実践例
計算機
def calculator(a, b, operation):
if operation == "add":
return a + b
elif operation == "subtract":
return a - b
elif operation == "multiply":
return a * b
elif operation == "divide":
if b != 0:
return a / b
else:
return "ゼロで割れません"
else:
return "不明な演算"
print(calculator(10, 5, "add")) # 15
リスト処理
<h1>各要素を2乗し、5より大きいものだけ抽出</h1>
nums = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x > 5, map(lambda x: x**2, nums)))
print(result) # [9, 16, 25]
まとめ
defで名前付き関数、lambdaで無名関数を定義。returnで返し、複数はタプルで。globalは最小限に。lambdaは高階関数と組み合わせて強力。関数をマスターして、Pythonプログラミングを効率化しましょう。