range pythonの基本構文とfor文実践活用法まとめ|よくある疑問・エラー対策も徹底解説

13 min 5 views

Pythonで繰り返し処理をスマートに実装したいと考えたとき、最初に直面するのが「range関数の正確な使い方、実際にどこでどう活用できるのか」という悩みではないでしょうか。エンジニア向け大規模アンケートでも、「rangeのstepや引数パターンの不理解によるバグ経験」が複数報告されています。

rangeはPythonのfor文やリスト内包表記に欠かせない機能ですが、start・stop・stepの使い分け、負のstepによる降順処理、生成するシーケンスの性質など、本質を理解できていないと「想定外のループ範囲」「メモリ効率の低下」「小数対応の落とし穴」など思わぬトラブルの原因となることも珍しくありません。

本記事では、公式ドキュメントと数多くの実装現場に基づき、実践的なコード例や具体的な動作パターンを交えながら、range関数の仕組みや失敗しやすいポイントを詳しく整理します。Python3以降での主流な書き方から、新しい仕様の違いまで、現場の困りごとがスムーズに解決できる構成になっています。

「何となく使っていたrangeが、なぜ・どのように動いているのか」「自分のコードは安全か」といった疑問を持つ方も、今日からプロ仕様の使いこなしが目指せます。知らないまま放置すると思いがけずパフォーマンスを損なうこともあるので、今すぐ確認して安心してください

目次

rangePythonとは|基本構文と意味を徹底解説

range関数の定義と特徴

Pythonのrange関数は、指定した範囲内の整数列を効率よく生成する標準関数です。主にfor文と組み合わせて繰り返し処理を行う際に活躍します。range関数の構文は以下の通りです。

引数 意味 省略時のデフォルト
start シーケンスの開始値(含む) 0
stop シーケンスの終了値(含まない) 必須
step 増分幅(整数) 1

戻り値は「range型」と呼ばれるオブジェクトで、リストのように扱えますが、メモリ効率がよいのが特徴です。必要に応じてlist(range())とすることでリスト化も可能で、多くの場面で活用されています。

rangeの読み方と利用場面

rangeは「レンジ」と読みます。実際のプログラミング現場では、for文と一緒に利用されることがほとんどです。例えば、for i in range(5)は、0から4までの5回繰り返す意味です。任意の範囲やステップでループ処理を制御できるため、リストのインデックス参照や、数値を利用する繰り返し処理に頻繁に使用されています。

よく使われる利用例は次の通りです。

  • for i in range(1, 11): 1から10まで数字を出力

  • for i in range(0, 20, 2): 0から18まで2刻み

  • for i in range(len(list)): リストの長さ分ループ

このように、柔軟な繰り返し処理と高い可読性により、多くのPythonプログラムで欠かせない存在です。

range関数が生成するシーケンスの性質

range関数で生成されるシーケンスは、指定されたstartからstopまで、stepごとに増減する排他的範囲(stopは含まれない整数列)です。stepに負の値も指定できるため、逆順の生成も可能です。例えば、range(10, 0, -1)は10〜1までの整数列を作ります。

rangeは整数限定で、float(小数)には直接対応していません。小数のシーケンスが必要な場合は工夫や他の関数の併用が必要となります。

  • list(range(3)) → [0, 1, 2]

  • list(range(1, 5)) → [1, 2, 3, 4]

  • list(range(10, 1, -2)) → [10, 8, 6, 4, 2]

このように、range関数は柔軟な数値列の生成が可能で、繰り返し処理やインデックス操作を支える重要な役割を担っています。

rangePythonの書き方と引数パターン徹底解説

Pythonのrange関数は、指定した数値の範囲で整数列を生成し、for文によるループ処理で頻繁に利用される代表的な関数です。特に繰り返し処理や連番のリスト作成での使い勝手が良く、Pythonプログラミングの基本技術として押さえておくべき要素です。

range関数はstart、stop、stepの最大3つの引数を設定できます。使い方によってさまざまなバリエーションがあり、柔軟な数値操作が実現できます。Python公式ドキュメントでも詳しく解説されていますが、ここでは実践的に使い分けや挙動の違いも含めて整理します。

引数1つ・2つ・3つの使い分けと効果

range関数は引数の数によって挙動が変わります。それぞれの役割と実用例は以下の通りです。

パターン 書き方 挙動と利用例
引数1つ(stop) range(stop) 0からstop-1までの整数列
引数2つ(start,stop) range(start, stop) startからstop-1まで。開始値も明示
引数3つ(start,stop,step) range(start, stop, step) stepで増減。正の値なら昇順、負の値で降順も可能
  • range(5) → 0,1,2,3,4

  • range(1,5) → 1,2,3,4

  • range(1,10,2) → 1,3,5,7,9

リストが必要な場合はlist(range(…))で変換します。for文の反復処理やリスト生成に頻繁に利用されています。

stepを使った増減制御と負のstepの意味

step引数で増減の幅や方向を細かく制御できます。stepを正数にすれば昇順でステップ幅を指定し、負数にすれば降順のシーケンスも簡単です。

  • range(10, 0, -2) → 10,8,6,4,2

  • range(2, 11, 2) → 2,4,6,8,10

負のstepを指定すると逆方向の反復処理が可能となり、リストの逆順処理やカウントダウン的な用途にも使えます。stepを省略すれば1、昇順がデフォルトです。

範囲指定における注意点と動作仕様

range関数でよくある注意点は、stop値が含まれないことです。これはPythonでのプログラムミスを防ぐ設計意図によるものです。例えば、range(1,10)では1から9までの数値が生成され、10は含まれません。リストのindex参照やfor文での利用時も同じ仕様です。

  • for i in range(1,10): → 1〜9がiに順番に代入

  • range(len(data)) でindexを安全に走査可能

多くのエラーや誤解はstop値の扱いに起因するため、範囲は「start以上、stop未満」を意識してください。

また、floatは直接指定できませんが、整数に変換したり、numpyライブラリのarange関数を活用して小数ステップにも対応できます。

範囲指定で困った場合はポイントを押さえて書くことで、for文やシーケンス生成で効率的かつ安全なコーディングが行えます。

for文とrangePythonの連携活用法

基本的なforループとrange利用例

Pythonのrange関数は、指定した範囲内で整数を生成するための非常に便利な組み込み関数です。for文と組み合わせることで、繰り返し処理が簡潔に記述できます。例えば、for i in range(5):と書くと、0から4までの整数が順番に取り出されます。そのため、回数指定のループ処理や連番リストの生成に最適です。下記は基本的な使い方の代表例です。

for i in range(5):
print(i)

このコードでは0から4までの5回ループが実行されます。引数を1つだけ指定した場合は、開始値が0で終了値は指定値未満となります。よくある用途として「for i in range(10)」「for i in range(3)」など回数限定ループがあり、特定の回数だけ処理を繰り返す際に多用されています。range関数はイテレータを返し、効率的なメモリ使用を実現しています。

引数を工夫したfor文ループ制御の実践例

range関数は引数を増やすことで開始値・終了値・ステップ幅の指定が可能です。range(start, stop, step)の形で利用すると、柔軟なループ制御が実現できます。たとえば「1から10まで2ずつ増加」というロジックも簡単です。

for i in range(1, 10, 2):
print(i)

この例では1, 3, 5, 7, 9が表示されます。stepにマイナス値を指定すれば逆順も可能です。範囲設定で注意すべきは、終了値(stop)は含まれないことです。また誤って範囲外参照を防ぐため、range(len(list))などとlenを活用すると安全にリスト要素を順番に処理できます。ループ範囲を柔軟に変えることで、応用的な制御やデータ処理にも幅広く対応できます。

range(len)とrangeの違いと使い分けを明確化

range(len(リスト))はリストやシーケンスのインデックス取得に便利です。例えば「for i in range(len(items))」と書くことで、0からリストの長さ-1まで繰り返し、インデックス番号を使って要素へアクセスできます。一方、range(5)のように数値を直接指定すると、純粋な整数の並びとなるためオブジェクトや文字列などの長さを必要としません。

下記のテーブルはrange(len)rangeの実用的な違いを整理しています。

用途 書き方 説明
リストの要素番号取得 for i in range(len(lst)) インデックス番号を利用してリスト操作を行う
指定回数のループ for i in range(5) 0から4まで5回繰り返し処理
開始・終了・ステップ指定 for i in range(1,10,2) 開始値・終了値・増分を細かくコントロール

「for i in range(len(リスト))」は、リスト内容の編集・インデックス参照に向いていますが、値だけ利用したい場合は直接「for item in リスト」とする方法も推奨されます。用途に応じて最適な使い分けを選ぶことが重要です。

rangePythonとリスト・リスト内包表記の連携実用テクニック

rangeで生成したシーケンスのリスト化方法

Pythonのrange関数は効率的な整数列の生成を可能にし、多くの反復処理やリスト操作で活用されています。rangeで生成されるのは「range型」のイミュータブルなイテレータであり、そのままではリスト操作ができません。list()関数と組み合わせることで、rangeの範囲をリストに変換できます。例えば、range(1, 6)list(range(1, 6))とすれば、[1, 2, 3, 4, 5]というリストが得られます。これはfor文によるループだけでなく、リストとして値を扱いたいときに非常に有用です。整数のステップ幅や開始〜終了値の指定も柔軟に対応可能です。stepや負のステップを使えば、降順のリスト生成も容易です。次にリスト化の挙動一覧を示します。

コード例 結果
list(range(5)) [0, 1, 2, 3, 4]
list(range(1, 10, 2)) [1, 3, 5, 7, 9]
list(range(10, 5, -1)) [10, 9, 8, 7, 6]

リスト内包表記でのrange活用法

リスト内包表記は、for文を簡潔かつ高速に書けるPythonの強力な機能です。rangeと組み合わせることで、指定範囲の値を自在に加工した新しいリストをワンライナーで作成できます。例えば「1から10までの2乗リスト」を作る場合は、[i**2 for i in range(1, 11)]と記述できます。コードの可読性が向上し、計算量が大きい処理でもパフォーマンスに優れています。ステップや条件を加えることで、偶数や奇数、特定の数値だけをリストアップすることも簡単です。リスト内包表記での代表的な利用例を紹介します。

  • [str(i) for i in range(5)] → [‘0’, ‘1’, ‘2’, ‘3’, ‘4’]

  • [x for x in range(10) if x % 2 == 0] → [0, 2, 4, 6, 8]

  • [round(0.1 * i, 1) for i in range(10)] → [0.0, 0.1, 0.2, …, 0.9]

リスト内包表記でrangeの強みを最大限活用しましょう。

応用例:文字列リストの生成、加工サンプル

実際に日常の開発で役立つ例として、rangeとリスト内包表記を使った文字列リストの自動生成や加工は頻繁に行われます。例えば、連番付きファイル名のリストや、決まったパターンのメールアドレスのリスト作成が挙げられます。

目的 コード例 結果
連番ファイル名リスト生成 [f'file_{i}.txt' for i in range(1, 6)] [‘file_1.txt’, ‘file_2.txt’, …, ‘file_5.txt’]
メールアドレスリスト生成 [f'user{i}@example.com' for i in range(10)] [‘user0@example.com’, …, ‘user9@example.com’]
固定書式の値リスト [f'No.{i:03d}' for i in range(1, 4)] [‘No.001’, ‘No.002’, ‘No.003’]

このように、文字列のフォーマットや数値加工との組み合わせでさまざまな自動化処理が実現できます。Pythonのrange関数とリスト内包表記を活用することで、コード量を削減しながら読みやすいスクリプトを効率よく実装可能です。

rangePythonで小数値(float)対応を工夫する方法

Pythonでfloatの等差数列を作る自作関数例

標準のrange関数は整数のみ対応しており、小数(float)の範囲指定には直接利用できません。そのため、floatの等差数列を扱う場合は自作関数の利用や外部ライブラリを活用する必要があります。

方法 特徴 使用例
frange自作 任意の開始値・終了値・ステップ値で柔軟に対応 for v in frange(0.0, 1.0, 0.1):
numpy.arange 高速かつ多機能、小数誤差に注意 import numpy as np; np.arange(0, 1, 0.1)
numpy.linspace 要素数での分割精度指定、分析用途に便利 np.linspace(0, 1, 11)

代表的なfrange自作例
python
def frange(start, stop, step):
while start < stop:
yield start
start += step

for文互換でfloat数列生成が可能です。複雑な範囲やリスト化もlist(frange(…))で容易に実現できます。
numpyは科学計算やデータ分析で活躍しており、floatの範囲処理で多く使われています。
このように用途に合わせた方法を選びましょう。

精度・パフォーマンス課題の理解と回避策

float演算には丸め誤差や累積計算の不安定さが生じやすいため、精度管理が重要です。
パフォーマンス面でも整数rangeと異なり、イテレータやリスト化によるメモリ消費増大に注意が必要です。

よくある課題 発生理由 回避策例
小数誤差で指定値で止まらない/重複出力 float演算の性質 round関数Decimal型の利用
パフォーマンス低下や処理の遅延 リスト生成数の増加やコピーデータ量 ジェネレータ式配列演算活用
ステップの正負判断・境界値のずれ step値に小数使用・不等号処理の難しさ 停止条件にround(stop, n)比較や符号判断を導入

特にループ内でfloatを用いる場合は、round関数で桁数を指定した比較や結果出力を行うことで安定性を高められます。より厳密な数値制御が必要な場合はdecimalモジュールの利用も効果的です。

floatの範囲処理は、要件や利用用途に応じた方法選択と、誤差・効率のバランス管理がポイントです。適切な工夫で柔軟かつ正確な数列処理が実現できます。

rangePythonの注意点やミスしやすいポイント、バージョン違い

python2のxrangeとpython3のrange比較

Python2で使われていたxrangeは、Python3で廃止され、rangeが同じ機能を担っています。xrangeはイテレータを返し、メモリ使用効率が良いですが、Python3環境ではサポートされていません。Python3のrangeは、イミュータブルなrangeオブジェクトを返し、メモリ消費を抑えつつ幅広い機能に対応しています。現行の標準環境では、rangeのみ使用可能です。

比較項目 Python2:xrange Python3:range
メモリ効率 高い 高い
返り値 イテレータ rangeオブジェクト
リスト変換 list(xrange()) list(range())
サポート環境 廃止 標準

Pythonで範囲指定を安全に使いたい場合は、バージョン確認やrangeの使用を徹底してください。

小数点非対応やstepが0の場合のエラー対策

rangeは整数型のみを扱う仕様です。stepに小数や0を指定するとエラーになります。よくある例外について下記に整理します。

代表的なエラーパターン:

  • range(1.0, 10.0) → TypeError: ‘float’ object cannot be interpreted as an integer

  • range(1, 10, 0) → ValueError: range() arg 3 must not be zero

対応方法:

  1. floatを整数へ変換する場合:
    • start, stop, stepに小数が含まれる場合、int()やround()で事前に変換する。
  2. 0以外のstepを設定する:
    • step値は正負の整数のみ許容される。

実用例:

  • for i in range(int(1.2), int(10.8)):

    • 小数点を切り捨てて範囲設定
  • for i in range(10, 0, -1):

    • 負のstepでカウントダウン

floatの範囲をforで反復する場合:

  • リスト内包表記やnumpy.arange等の代用を検討しましょう。

メモリ効率とパフォーマンス最適化のヒント

range関数は、メモリ効率の高さが特徴です。特にfor文や大規模データを扱う場合、イミュータブルなrangeオブジェクトが効力を発揮します。リスト化(list(range()))は全要素を展開するため、大きな範囲ではメモリ消費が急上昇します。

最適に扱うポイント:

  • 大量のループ処理は、リストではなくrangeオブジェクトのままイテレーション

  • 値の一括生成や格納が必要な場合のみlist(range())を使用

  • 長い範囲を扱うときは、ジェネレータやイテレータの特性を活かす

パフォーマンスの観点から避けたい処理:

  • for i in list(range(1, 10000000)):

    • メモリ不足や速度低下の原因になります

メモリ効率重視のテクニック一覧:

  • list化せず直接for文で利用

  • Python3標準のrangeを活用

  • ステップ幅や範囲設定を意識し、無駄な全列挙を避ける

rangeは大規模データ処理やループ時に強みを発揮しますが、使い方によってはパフォーマンスにも大きな違いが出ます。一度に全ての要素が必要か、逐次処理で良いかを判断し、正しい実装を心がけましょう。

rangePythonを活用した実践的応用例と問題解決シナリオ

条件付き抽出とリストのフィルタリング応用

rangeを使った条件付き抽出やリストのフィルタリングは、実践現場で頻繁に活用されます。for文と組み合わせることで、数値範囲から特定条件に合致する要素のみを効率よく抽出できます。

例として、1から100までの偶数をリスト化する方法は以下の流れになります。

  1. range関数でstart=1、stop=101、step=1の範囲を生成
  2. if文で偶数か判定
  3. 該当する値をリストへ追加

さらに、リスト内包表記を使えば、よりシンプルに表現可能です。

代表的なフィルタ処理例:

処理内容 サンプルコード 結果例
偶数抽出 [x for x in range(1,101) if x%2==0] [2,4,6,8,…,100]
3の倍数抽出 [x for x in range(1,31) if x%3==0] [3,6,9,12,…,30]

強調ポイント

  • リスト内包表記は簡潔かつ高速

  • 任意の条件で抽出範囲の柔軟なカスタマイズが可能

集計や累積計算へのrange利用手法

業務やデータ処理では、数値の合計や累積を求める集計処理が不可欠です。rangeを使うと、シンプルな集計から複雑な累積演算まで柔軟に対応可能です。

集計の代表例:

  • 合計: sum(range(1,11)) → 1から10までの合計

  • 積算:

    result = 1
    for i in range(1,6):
    result *= i
    (1~5の階乗を計算)

累積計算やフラグ管理もrangeで容易に実装できます。連番データの生成やインデックスの管理にも適しており、データ分析やレポート出力作成でも活躍しています。

主な活用シーンリスト

  • データ集計(例:売上の合計値)

  • グラフ作成時の目盛り生成

  • 累積歩数や点数の計算

ポイント

  • sumやfor文とあわせてrangeを使うことで可読性・メンテナンス性が大幅アップ

  • 長い範囲でも省メモリで処理可能なrange型オブジェクトの利点

パフォーマンス比較や他言語との処理速度検証

Pythonのrangeは効率的なループ処理が可能ですが、他言語や異なる生成方法との比較も重要です。ベンチマークを取ることで実用上の性能差を把握できます。

比較表

比較対象 メモリ消費量 速度(要素10万回処理)
range型 低(イテレータ) 高速
list(range) 高(リスト生成) やや高速
for文 in VBA 中-低

強調ポイント

  • rangeはイテレータのため大規模なループでも省メモリ

  • list(range)でリスト変換すると要素への即時アクセスが可能だが、メモリ消費増大

  • 他言語(例:Excel VBA)のループ処理よりPythonのrangeは一般的に高速

このように、Pythonのrangeは柔軟性・応用力・効率性の面で、実務でも確かな優位性を持っています。各シーンに適切な構文を選択することで、作業効率やパフォーマンスを最大化できます。

rangePythonに関するよくある疑問・誤解とQ&A総合解説

range型の性質やメモリ効率に関する質問

range関数は、Pythonで整列した数値の範囲を生成する際に用いられる重要なオブジェクトです。range型はイテレータと異なり、全要素を一度に保持せず、必要なタイミングで値を生成するため非常にメモリ効率に優れています。
例えば、10万件以上の数値シーケンスも瞬時に扱えます。以下のテーブルに、range・リスト・イテレータの特徴を比較します。

種類 メモリ消費 要素取得 変換方法
range 少ない ダイレクトにアクセス list(), tuple()で変換
list 多い リストで全保持
イテレータ 少ない 一度ずつ取得 list()でリスト化

この仕組みにより、for文での繰り返しや大規模データの範囲指定にも安心して利用できます。

list化、tuple化など変換時の注意点

rangeオブジェクトは必要に応じてlistやtupleに変換可能ですが、要素数が多い場合はメモリ消費が急増します。リスト化には「list(range(開始値, 終了値, ステップ))」、タプル化には「tuple(range(…))」を使います。

  • 使い分けポイント

    • 少数の要素:listやtupleで処理しやすい
    • 大量の要素:range型のままで必要な範囲だけ使う

注意点として、stepに小数値(float)は直接指定できません。floatを使いたい場合は自作関数やNumPyのarangeを利用しましょう。下記に変換の例を載せます。

変換対象 コード例
list list(range(1, 10))
tuple tuple(range(1, 10, 2))

エラー回避策(引数の不正やstepの誤用など)

range関数は整数型のみを受け付け、引数にfloatや誤った型、ゼロや負数のstepを指定するとエラーになります。step引数には0を指定できません。また、start値がstop値と等しい場合やstepの向きが範囲と矛盾する場合、空のrangeとなります。

  • エラー例と対策

    1. range(1, 10, 0):ZeroDivisionError
    2. range(1, 5.5):TypeError
    3. range(‘a’, 10):TypeError

stepを負数にして降順も可能ですが、start>stop時のみ有効です。引数の型や値をしっかり確認することで予期せぬトラブルを防げます。

VBAやExcelのrange関数との違いについて

Pythonのrange関数とExcelやVBAのrange関数はまったく異なる役割を持ちます。Pythonでは「数値の連番生成」、Excel/VBAでは「セル範囲の参照・操作」です。両者の目的と利用シーンは違うため、混同しないよう注意してください。

項目 Pythonのrange Excel/VBAのRange
主な用途 数値範囲生成 セル範囲の指定
戻り値・型 イテラブルオブジェクト Rangeオブジェクト
使い方例 for i in range(5) Range(“A1:B3”)

この違いを理解することで、正確なコード記述や効率的な処理が行えます。

実務に役立つ情報源・ドキュメント紹介

Python公式ドキュメントでは、range関数の使い方や詳細仕様が分かりやすく説明されています。実務でよく使うパターンや応用例も豊富に紹介されているため、困ったときは公式リファレンスや信頼できる情報サイトの活用が重要です。

  • おすすめの情報源例

    • Python公式ドキュメント「range()」
    • 標準モジュールリファレンス
    • 統計処理や科学計算ならNumPy関連資料

業務で効率的にコードを書く上で、信頼性の高い情報やサンプルコードを参照することは不可欠です。

追加トピック:Pythonのrange関数の最新動向と将来展望

Python 3.13以降のrange改善点まとめ

Python 3.13以降、range関数はさらなる使いやすさとパフォーマンス向上が図られています。主な改善点を以下のようにまとめます。

改善項目 内容
メモリ効率 rangeオブジェクトの内部最適化が進み、大規模な範囲の生成時でもより低いメモリ消費となっています。
イテレーション速度 for文とrangeを組み合わせた場合のループ処理速度がわずかに向上しています。
型サポートの拡張 引数に対する型チェックが強化され、不正な値入力時のエラーメッセージが分かりやすくなりました。
ドキュメント改善 新しい活用例や注意点が加筆され、初心者でもわかりやすい説明に更新されています。

これにより、「for i in range(5)」や「python for文 range 1から」などの繰り返し処理がさらに高効率で安心して使えるようになっています。

新版ドキュメントでの更新履歴と解説

公式ドキュメントでは、range関数の仕様や記述例、注意事項に関する説明がより詳細化されています。特に以下のポイントが強調されています。

  • range型オブジェクトの特性:イミュータブルであり、リストやタプルへの変換も従来通り対応しています。

  • 引数(start、stop、step)の組み合わせ例:「python range 引数 3つ」「for i in range(1,10,2)」といった典型パターンが明確な記載になりました。

  • エラー例の充実:例えば「python range float」や「Python range 小数」など非整数指定を行った場合のエラー事例と回避方法が追記されています。

ユーザーはこうした新版ドキュメントにより、range関数を「python range(len)」や「python リスト 小数」など多様な用途で、より実践的に活用しやすくなっています。

他のイテレーターやジェネレーターと比較したrangeの位置付け

range関数は繰り返し処理において他のイテレーターやジェネレーターと比較した際、シンプルさと効率性に優れた特長を持ちます。

比較項目 range 他のイテレーター(例:enumerate, zip) ジェネレーター
コードの簡潔さ for文と組み合わせるだけで簡単 複数オブジェクトの走査に便利 柔軟な処理が可能だが実装がやや複雑
メモリ効率 要素を逐次生成しメモリ消費が非常に小さい range同様に効率的なものが多い 大量データも扱えるが処理内容次第
用途の幅 連番や決まった範囲の繰り返しに最適 イテラブル同士の組み合わせ、添字取得など 複雑なフィルタリングや動的処理に向く
型変換の容易さ list(range())等でリスト変換が簡単 enumerateはタプル、zipは複数リストを作成可能 任意のイテラブルを自作できる

このような観点でrangeは特に「python for range 1から100」「Python range(len)」といった”明確な範囲指定や簡潔な反復処理”で強みを発揮します。他のイテレーターやジェネレーターと組み合わせれば、リスト処理や条件付きループなど発展的な活用も可能です。