ラムダ関数の概念と応用
ラムダ関数はPythonにおける無名関数です。主に簡潔な単一行関数を即座に定義するために使用され、defキーワードを使わずに関数を作成できます。高階関数の引数としてリスト内包表記やmap()、filter()などで活用されます。基本構文は:lambda 引数リスト: 式
主な利点
- コードの簡潔化:単一の式で表現可能
- 変数名衝突回避:名前空間を汚染しない
- 即時実行:定義と実行を同時に可能
# 例1: 加算処理
calculate_sum = lambda a, b: a + b
print(calculate_sum(3, 5)) # 出力: 8
# 例2: ソート処理
person_list = [("Alice", 25), ("Bob", 20), ("Charlie", 30)]
person_list.sort(key=lambda p: p[1])
print(person_list) # 出力: [('Bob', 20), ('Alice', 25), ('Charlie', 30)]
# 例3: フィルタリング
num_sequence = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda n: n % 2 == 0, num_sequence))
print(evens) # 出力: [2, 4, 6]
デコレータの動作原理
デコレータは関数の動作を変更するPython関数で、元の関数を変更せずに機能追加します。ロギング、パフォーマンス計測、トランザクション処理などに利用され、重複コードの削減に効果的です。
def simple_decorator(func):
def decorator_wrapper():
print("処理前の操作")
func()
print("処理後の操作")
return decorator_wrapper
@simple_decorator
def greet():
print("こんにちは!")
greet()
# 出力:
# 処理前の操作
# こんにちは!
# 処理後の操作
Pythonのメモリ管理機構
Pythonのガベージコレクションは主に三つの方法でメモリを管理します:
- 参照カウント:オブジェクトへの参照数を追跡
- マーク&スイープ:循環参照を処理
- 世代別回収:生存時間に基づいた効率的な回収
dir関数の実践的使用例
class CustomClass:
def __init__(self):
self.identifier = "John"
def display_greeting(self):
print("Hello, world!")
instance = CustomClass()
print("オブジェクトの属性:", dir(instance))
特殊メソッドの役割
ダンダー(__)で囲まれたメソッドはPythonの特殊メソッドとして機能します:
class ValueContainer:
def __init__(self, val):
self.val = val
def __str__(self):
return f"保持値: {self.val}"
container = ValueContainer(10)
print(container) # 出力: 保持値: 10
変数スコープの規則
- 単独アンダースコア(_):プロテクテッド(サブクラスアクセス可)
- ダブルアンダースコア(__):プライベート(クラス内のみアクセス可)
__new__と__init__の差異
| 項目 | __new__ | __init__ |
|---|---|---|
| 役割 | インスタンス生成 | 初期化処理 |
| 実行順 | 第一 | 第二 |
| 戻り値 | オブジェクト | なし |
| タイプ | 静的メソッド | コンストラクタ |
イテレータとジェネレータの比較
イテレータ:__next__()で要素を逐次取得
seq_iter = iter([1, 2, 3])
print(next(seq_iter)) # 出力: 1
ジェネレータ:yieldで状態を保持
def countdown_gen(n):
while n > 0:
yield n
n -= 1
for num in countdown_gen(3):
print(num) # 出力: 3→2→1
例外処理の実装パターン
try:
value = int(input("数値を入力: "))
res = 10 / value
except ZeroDivisionError:
print("ゼロ除算エラー")
except ValueError:
print("無効な入力")
else:
print("結果:", res)
finally:
print("処理終了")
アサーションの実践的使用
# 基本形
assert condition, "エラーメッセージ"
# 使用例
def linux_system_check():
import sys
assert sys.platform == "linux", "Linuxシステムでのみ動作"
linux_system_check()