メインコンテンツへスキップ
記事一覧に戻る
programming

【脱初心者】Pythonを使いこなす関数・テクニック完全ガイド2025

Lambda、map/filter、dataclasses、パターンマッチングなど、Python中級者が知っておくべき関数とテクニックを徹底解説。Python 3.12/3.13の最新機能も網羅。

2025-12-1225 min readAdabana Saki
-
Pythonチートシートプログラミング関数型プログラミングPython3.13

Python脱初心者のための関数・テクニック完全ガイド

「for文とif文で何でも書けるけど、もっとスマートに書きたい...」

「他の人のコードを見ると、見たことない書き方がたくさん出てくる...」

Pythonの基礎を覚えた後、多くの人がぶつかる壁です。私も最初は forif の組み合わせで何でも書いていました。でも、Pythonにはもっとエレガントで効率的な書き方がたくさんあるんです。

この記事では、Python中級者〜上級者が知っておくべき関数やテクニックを、実践的なコード例とともに解説します。2025年現在の最新機能(Python 3.13)も含めて、これさえ押さえておけば「Pythonicなコード」が書けるようになりますよ。

<callout type="info" title="対象読者">
  • Pythonの基礎(変数、リスト、辞書、関数定義)は分かる
  • for 文や if 文は問題なく使える
  • でも、もっと効率的・スマートに書きたい
</callout>

Lambda関数 ― 無名関数の威力

基本構文

Lambda関数は「名前のない小さな関数」です。一行で関数を定義できます。

Python

「わざわざLambdaを使う意味あるの?」と思いますよね。Lambda関数の真価は、他の関数と組み合わせたときに発揮されます。

sorted() との組み合わせ

Python

複数条件でのソート

Python

max() / min() との組み合わせ

Python

map / filter / reduce ― 関数型プログラミングの基本

map() ― 全要素に関数を適用

Python

filter() ― 条件に合う要素を抽出

Python

functools.reduce() ― 累積計算

Python

いつ何を使う?

やりたいこと使うべきもの
全要素を変換map() またはリスト内包表記文字列→整数変換
条件で絞り込みfilter() またはリスト内包表記偶数だけ抽出
1つの値に集約reduce() または sum()合計、最大値
<callout type="tip" title="内包表記 vs map/filter">

Pythonでは、map()filter() よりも内包表記が好まれることが多いです。可読性が高く、Pythonicとされています。

Python

ただし、既存の関数を適用する場合は map() が簡潔です。

Python
</callout>

内包表記 ― Pythonらしさの象徴

リスト内包表記の応用

Python

辞書内包表記

Python

集合内包表記

Python

ジェネレータ式 ― メモリ効率の良い処理

Python

collectionsモジュール ― 特殊なコンテナ型

Counter ― 要素のカウント

Python

defaultdict ― デフォルト値付き辞書

Python

namedtuple ― 名前付きタプル

Python

deque ― 両端キュー

Python

itertoolsモジュール ― イテレータの魔法

chain ― 複数のイテレータを連結

Python

combinations / permutations ― 組み合わせと順列

Python

groupby ― グループ化

Python

islice ― イテレータのスライス

Python

takewhile / dropwhile ― 条件付きの取得

Python

functoolsモジュール ― 関数を操作する関数

partial ― 部分適用

Python

lru_cache ― メモ化(結果のキャッシュ)

Python
<callout type="tip" title="Python 3.9以降">

@functools.cache という @lru_cache(maxsize=None) と同等のデコレータが追加されました。

Python
</callout>

wraps ― デコレータを正しく作る

Python

dataclasses ― ボイラープレートの削減

基本的な使い方

Python

デフォルト値と不変性

Python

比較とソート

Python

asdict と astuple

Python

ウォルラス演算子 (:=) ― 代入式

Python 3.8で追加された「セイウチ演算子」。変数への代入と、その値の使用を同時に行えます。

基本的な使い方

Python

ファイル読み込み

Python

正規表現マッチング

Python

リスト内包表記での活用

Python

any() / all() との組み合わせ

Python

パターンマッチング (match/case) ― Python 3.10+

基本構文

Python

構造化パターン

Python

辞書のパターン

Python

ガード条件

Python

クラスのパターン

Python

Python 3.12 / 3.13 の新機能

より柔軟なf-string(Python 3.12)

Python

型パラメータ構文(Python 3.12)

Python

新しいインタラクティブシェル(Python 3.13)

Python 3.13では、PyPyプロジェクトのコードをベースにした新しいREPLが導入されました。

Text

実験的機能:JITコンパイラとフリースレッドモード(Python 3.13)

Python
<callout type="warn" title="実験的機能について">

JITコンパイラとフリースレッドモードは2025年現在、まだ実験的機能です。本番環境での使用は慎重に検討してください。多くのC拡張ライブラリはまだフリースレッドモードに対応していません。

</callout>

実践Tips:よく使うパターン集

ファイル操作

Python

辞書操作のイディオム

Python

エラーハンドリング

Python

その他の便利テクニック

Python

まとめ ― この記事で紹介した機能一覧

カテゴリ機能主な用途
関数型lambda小さな無名関数
map() / filter()イテラブルの変換・抽出
functools.reduce()累積計算
内包表記リスト/辞書/集合内包表記コレクションの生成
ジェネレータ式メモリ効率の良い処理
collectionsCounter要素のカウント
defaultdictデフォルト値付き辞書
namedtuple名前付きタプル
deque両端キュー
itertoolschain, combinationsイテレータ操作
groupby, isliceグループ化・スライス
functoolspartial部分適用
lru_cache / cacheメモ化
wrapsデコレータ作成
dataclasses@dataclassクラスの簡潔な定義
構文:=(ウォルラス演算子)代入式
match/caseパターンマッチング

学習のおすすめ順序

  1. まず覚える: 内包表記、lambdasorted() のkey引数
  2. 次に覚える: Counterdefaultdictlru_cache
  3. その後: dataclass、ウォルラス演算子、パターンマッチング
  4. 必要に応じて: itertoolsfunctools.partial

一度に全部覚える必要はありません。実際のコードを書く中で「こういうときに使えるな」と思い出せれば十分です。この記事をブックマークしておいて、必要なときに見返してください。

参考リンク