【脱初心者】Pythonを使いこなす関数・テクニック完全ガイド2025
Lambda、map/filter、dataclasses、パターンマッチングなど、Python中級者が知っておくべき関数とテクニックを徹底解説。Python 3.12/3.13の最新機能も網羅。
Python脱初心者のための関数・テクニック完全ガイド
「for文とif文で何でも書けるけど、もっとスマートに書きたい...」
「他の人のコードを見ると、見たことない書き方がたくさん出てくる...」
Pythonの基礎を覚えた後、多くの人がぶつかる壁です。私も最初は for と if の組み合わせで何でも書いていました。でも、Pythonにはもっとエレガントで効率的な書き方がたくさんあるんです。
この記事では、Python中級者〜上級者が知っておくべき関数やテクニックを、実践的なコード例とともに解説します。2025年現在の最新機能(Python 3.13)も含めて、これさえ押さえておけば「Pythonicなコード」が書けるようになりますよ。
<callout type="info" title="対象読者">- Pythonの基礎(変数、リスト、辞書、関数定義)は分かる
for文やif文は問題なく使える- でも、もっと効率的・スマートに書きたい
Lambda関数 ― 無名関数の威力
基本構文
Lambda関数は「名前のない小さな関数」です。一行で関数を定義できます。
「わざわざLambdaを使う意味あるの?」と思いますよね。Lambda関数の真価は、他の関数と組み合わせたときに発揮されます。
sorted() との組み合わせ
複数条件でのソート
max() / min() との組み合わせ
map / filter / reduce ― 関数型プログラミングの基本
map() ― 全要素に関数を適用
filter() ― 条件に合う要素を抽出
functools.reduce() ― 累積計算
いつ何を使う?
| やりたいこと | 使うべきもの | 例 |
|---|---|---|
| 全要素を変換 | map() またはリスト内包表記 | 文字列→整数変換 |
| 条件で絞り込み | filter() またはリスト内包表記 | 偶数だけ抽出 |
| 1つの値に集約 | reduce() または sum() 等 | 合計、最大値 |
Pythonでは、map() や filter() よりも内包表記が好まれることが多いです。可読性が高く、Pythonicとされています。
ただし、既存の関数を適用する場合は map() が簡潔です。
内包表記 ― Pythonらしさの象徴
リスト内包表記の応用
辞書内包表記
集合内包表記
ジェネレータ式 ― メモリ効率の良い処理
collectionsモジュール ― 特殊なコンテナ型
Counter ― 要素のカウント
defaultdict ― デフォルト値付き辞書
namedtuple ― 名前付きタプル
deque ― 両端キュー
itertoolsモジュール ― イテレータの魔法
chain ― 複数のイテレータを連結
combinations / permutations ― 組み合わせと順列
groupby ― グループ化
islice ― イテレータのスライス
takewhile / dropwhile ― 条件付きの取得
functoolsモジュール ― 関数を操作する関数
partial ― 部分適用
lru_cache ― メモ化(結果のキャッシュ)
@functools.cache という @lru_cache(maxsize=None) と同等のデコレータが追加されました。
wraps ― デコレータを正しく作る
dataclasses ― ボイラープレートの削減
基本的な使い方
デフォルト値と不変性
比較とソート
asdict と astuple
ウォルラス演算子 (:=) ― 代入式
Python 3.8で追加された「セイウチ演算子」。変数への代入と、その値の使用を同時に行えます。
基本的な使い方
ファイル読み込み
正規表現マッチング
リスト内包表記での活用
any() / all() との組み合わせ
パターンマッチング (match/case) ― Python 3.10+
基本構文
構造化パターン
辞書のパターン
ガード条件
クラスのパターン
Python 3.12 / 3.13 の新機能
より柔軟なf-string(Python 3.12)
型パラメータ構文(Python 3.12)
新しいインタラクティブシェル(Python 3.13)
Python 3.13では、PyPyプロジェクトのコードをベースにした新しいREPLが導入されました。
実験的機能:JITコンパイラとフリースレッドモード(Python 3.13)
JITコンパイラとフリースレッドモードは2025年現在、まだ実験的機能です。本番環境での使用は慎重に検討してください。多くのC拡張ライブラリはまだフリースレッドモードに対応していません。
</callout>実践Tips:よく使うパターン集
ファイル操作
辞書操作のイディオム
エラーハンドリング
その他の便利テクニック
まとめ ― この記事で紹介した機能一覧
| カテゴリ | 機能 | 主な用途 |
|---|---|---|
| 関数型 | lambda | 小さな無名関数 |
map() / filter() | イテラブルの変換・抽出 | |
functools.reduce() | 累積計算 | |
| 内包表記 | リスト/辞書/集合内包表記 | コレクションの生成 |
| ジェネレータ式 | メモリ効率の良い処理 | |
| collections | Counter | 要素のカウント |
defaultdict | デフォルト値付き辞書 | |
namedtuple | 名前付きタプル | |
deque | 両端キュー | |
| itertools | chain, combinations | イテレータ操作 |
groupby, islice | グループ化・スライス | |
| functools | partial | 部分適用 |
lru_cache / cache | メモ化 | |
wraps | デコレータ作成 | |
| dataclasses | @dataclass | クラスの簡潔な定義 |
| 構文 | :=(ウォルラス演算子) | 代入式 |
match/case | パターンマッチング |
学習のおすすめ順序
- まず覚える: 内包表記、
lambda、sorted()のkey引数 - 次に覚える:
Counter、defaultdict、lru_cache - その後:
dataclass、ウォルラス演算子、パターンマッチング - 必要に応じて:
itertools、functools.partial
一度に全部覚える必要はありません。実際のコードを書く中で「こういうときに使えるな」と思い出せれば十分です。この記事をブックマークしておいて、必要なときに見返してください。