returnとyieldの違いを徹底解説:Pythonの関数設計で押さえるべきポイント

  • このエントリーをはてなブックマークに追加
returnとyieldの違いを徹底解説:Pythonの関数設計で押さえるべきポイント
この記事を書いた人

中嶋悟

名前:中嶋 悟(なかじま さとる) ニックネーム:サトルン 年齢:28歳 性別:男性 職業:会社員(IT系メーカー・マーケティング部門) 通勤場所:東京都千代田区・本社オフィス 通勤時間:片道約45分(電車+徒歩) 居住地:東京都杉並区・阿佐ヶ谷の1LDKマンション 出身地:神奈川県横浜市 身長:175cm 血液型:A型 誕生日:1997年5月12日 趣味:比較記事を書くこと、カメラ散歩、ガジェット収集、カフェ巡り、映画鑑賞(特に洋画)、料理(最近はスパイスカレー作りにハマり中) 性格:分析好き・好奇心旺盛・マイペース・几帳面だけど時々おおざっぱ・物事をとことん調べたくなるタイプ 1日(平日)のタイムスケジュール 6:30 起床。まずはコーヒーを淹れながらニュースとSNSチェック 7:00 朝食(自作のオートミールorトースト)、ブログの下書きや記事ネタ整理 8:00 出勤準備 8:30 電車で通勤(この間にポッドキャストやオーディオブックでインプット) 9:15 出社。午前は資料作成やメール返信 12:00 ランチはオフィス近くの定食屋かカフェ 13:00 午後は会議やマーケティング企画立案、データ分析 18:00 退社 19:00 帰宅途中にスーパー寄って買い物 19:30 夕食&YouTubeやNetflixでリラックスタイム 21:00 ブログ執筆や写真編集、次の記事の構成作成 23:00 読書(比較記事のネタ探しも兼ねる) 23:45 就寝準備 24:00 就寝


returnとyieldの基本を理解する:何が違うのか最初の一歩

ログラミングの世界には「return」と「yield」という2つの言葉があります。この2つは役割がまるで違うため、使い分けを正しく知ることが重要です。まずは基本を押さえましょう。
returnは関数の実行を終わらせ、結果を一度だけ返します。関数を呼ぶと、そのreturnの値が戻ってきてプログラムは次の処理へ進みます。もう少し詳しくいうと、returnは値を“一度だけ”返して関数を終了させる動作です。
対してyieldは「返す値を順番に作り出す」機能です。yieldを使った関数は「ジェネレータ」という特殊な関数になり、呼び出すとすぐに値を返すのではなく、必要になったときに次の値を計算して返す仕組みになります。つまり、yieldは「途中経過を一つずつ返す装置」と考えると理解しやすいです。
この違いを知ると、メモリの使い方や処理の流れが変わることが分かります。大量のデータを一度にメモリへ展開する必要がない場合、yieldを使うと効率が良くなることが多いです。次の段落では、具体的な仕組みと使い方を見ていきます。

まず、returnとyieldは関数の呼び出し方にも影響します。returnを使う関数は呼び出すと「値」が返って終わりですが、yieldを含む関数は「ジェネレータオブジェクト」という特殊な値を返します。これを使ってforループやイテレータで値を1つずつ取り出すことができます。もし全ての値を一度に用意してから処理したい場合はreturnを選ぶほうがシンプルです。しかし、データ量が多く、1つずつ順番に処理する必要がある場合はyieldのほうがメモリ効率が良くなることが多いです。これが大きな違いの核になります。

もう少し詳しく整理すると、returnは「結果を1回で返す」と理解すればOKyieldは「必要な時に次の値を計算して返し、処理を一時停止して再開できる」仕組みです。これを理解すれば、どんな場面でどちらを使うべきかの判断がしやすくなります。続く段落では具体的な使い方と注意点を見ていきましょう。

この章の要点まとめ:
returnは値を一度だけ返して関数を終了yieldは生成器として値を順番に返し、状態を保持して処理を再開できる大量データの扱いではyieldが有利なことが多い、と覚えておくとよいです。


実用例と注意点:いつどっちを使うべきか、実戦的な判断

実際のコードを想像してみましょう。
returnを使う関数は、すぐに結果を1つ返して処理を終えます。
例1: returnを使う場合、関数はデータをまとめて返すため受け取る側は1つの値しか得られません。

def sum_to(n):
total = 0
for i in range(1, n+1):
total += i
return total

このように書くと、nが大きいとき全体の合計を一度に計算して返します。次の処理へ進む前に全ての計算が完了していなければならない点がポイントです。反対にyieldを使う場合、値を順番に生成して返せます。
例2: yieldを使う場合、関数を呼ぶとジェネレータオブジェクトが返され、forループなどで1つずつ値を取り出せます。

def squares(n):
for i in range(n):
yield i*i

このパターンでは、必要な分だけ値を順次計算して返すため、nが大きくてもメモリを大量には使いません。実務でもこの性質がとても重宝されます。次の表は両者の代表的な違いを整理したものです。

able>要点returnyield返す動作値を一度だけ返して関数を終了次の値を必要な時に返す/処理を再開できるメモリの使い方結果をすべて一括で保持することが多い値を順次生成するのでメモリ消費が少ない呼び出し方関数を呼んで値を受け取るジェネレータを作成し、forループ等で値を取り出す

実務では、データの量が未知で大きい場合やストリーム処理が必要な場合にyieldを検討します。逆に、結果を完全に整えてから返したい場合や、処理の流れを単純にすることを重視する場合にはreturnを使うのが適しています。なお、yieldとreturnを同時に使うケースもありますが、それぞれの役割を混同しないように設計することが大切です。
また、例外処理や停止条件の扱いにも注意しましょう。ジェネレータはStopIterationが内部で発生しますが、通常はforループが勝手に停止してくれます。設計時には「この関数は何を返すべきか」「いつ処理を終えるべきか」を明確にしておくと混乱を避けられます。

総括としてのコツは、データ量と処理の性質を見極めて使い分けることです。一度に全体を集約して返すならreturn、必要な分だけ順次作って返すならyieldを選ぶと、コードの読みやすさと効率のバランスがよくなります。


まとめと次の一歩

この記事で、returnとyieldの基本的な違い実用的な使い分けの考え方、そして簡単なコード例を見てきました。ジェネレータと普通の関数の違いを正しく理解することで、データ処理の設計がぐんと広がります。実際のプロジェクトで試してみて、どの場面でどちらを使うべきか感覚を養いましょう。最後に覚えておきたいのは、Pythonの設計は「可読性」と「効率」の両立を目指すことです。returnとyield、両方の良さを使いこなせるようになると、あなたのコードは確実に進化します。


ピックアップ解説

今日は「yield」を深掘りした小ネタを一つ。実は yield は“終わりが来ても止まらないマシンのような仕組み”を生み出します。普通の関数が終わると全ての計算がそこで終わるのに対して、ジェネレータは次の値を作るための状態を内部に温存しておくので、次のループで前回の再開地点から再開できます。友達と話しているような言い方をすると、yieldは「途中で止まって、また会える約束をして戻る」ような機能です。これのおかげで、大量データを少しずつ処理するストリーム処理が自然にできるのです。


ITの人気記事

ズームとズームワークプレイスの違いとは?初心者でもわかる徹底解説!
1153viws
青写真と青焼きの違いとは?簡単解説でわかりやすく理解しよう!
941viws
「画素(ピクセル)とは何?解説と画像の違いをやさしく理解しよう」
813viws
CADデータとDXFデータの違いを徹底解説!初心者でもわかる使い分けのポイント
659viws
スター結線とデルタ結線の違いを徹底解説!初心者でも分かる電気の基本
657viws
HTTPとHTTPSの違いをわかりやすく解説!安全なネット利用のために知っておきたいポイント
514viws
5GとXi(クロッシィ)ってどう違うの?初心者にもわかりやすく解説!
505viws
初心者でもわかる!しきい値と閾値の違いを徹底解説
490viws
RGBとsRGBの違いって何?初心者でもわかる色の基本知識
480viws
インプレッション数とクリック数の違いを徹底解説 — CTRを上げるための基礎と落とし穴
477viws
API仕様書とIF仕様書の違いを徹底解説!初心者でもわかるポイントとは?
473viws
RGBとVGAの違いを徹底解説!初心者にもわかりやすい映像信号の基礎知識
464viws
IPアドレスとデフォルトゲートウェイの違いをわかりやすく解説!ネットワークの基本を理解しよう
461viws
SSDとUSBメモリの違いを徹底解説!初心者でもわかる保存デバイスの選び方
455viws
インターフォンとインターホンの違いって何?わかりやすく解説!
435viws
モバイルデータ通信番号と電話番号の違いを徹底解説!初心者でもわかるスマホの基礎知識
426viws
USB充電器とアダプターの違いとは?初心者にもわかりやすく解説!
394viws
グロメットとコンジットの違いとは?わかりやすく解説!
388viws
cookieとtokenの違いを徹底解説!ウェブの安全と使い分けのポイントを中学生にもわかる言葉で
386viws
USBフラッシュメモリとUSBメモリの違いとは?初心者でもわかる解説!
366viws

新着記事

ITの関連記事