これはArcPyカーソルに関する複数パートのシリーズの最初の記事です。特に、Pythonで反復可能なオブジェクトとしてArcPyカーソルを扱うことに焦点を当てています。 シリーズの最初の部分<\/STRONG>では、Pythonの反復処理における重要な要素のいくつかを見ていきます。 シリーズの第2部<\/A>では、ArcPy Data Accessカーソルの反復とループ処理について説明します。 シリーズの第3部<\/A>では、ArcPy Data AccessカーソルでいくつかのPython組み込み関数およびitertools関数を使用する方法を見ていきます。 シリーズの第4部では、コードの再利用のために選択やフィルタリングロジックを分離するためにジェネレーターまたはジェネレーター式を使用する方法を検討します。第5部以降は現時点では未定です。<\/EM><\/P><\/P>このブログ投稿シリーズは、反復処理の文脈でArcPy Data Access<\/A>カーソルに焦点を当てているため、このシリーズタイトルとなっています。カーソルは基本的に反復なしでは価値がないため、反復可能なカーソルについて話すのは馬鹿げているように思えるかもしれませんが、私がArcPyカーソルでスクリプトを書いた経験やGeoNetでの質問への対応から、カーソルについてPython的な考え方や操作方法を共有したいと思いました。<\/P><\/P>Pythonで反復処理について話すとき、多くの用語や表現が議論に関連することがあります。このブログ投稿シリーズに特に重要で関連性があると考える5つの用語は次のとおりです:<\/P>用語集<\/A><\/SPAN><\/P>generator<\/STRONG><\/P>イテレータを返す関数です。通常の関数のように見えますが、forループで使用できる一連の値を生成するためのyield<\/SPAN><\/A>文が含まれています。または、next()<\/A><\/SPAN>関数で一度に1つずつ取得できます。各yield<\/SPAN><\/A>は処理を一時停止し、実行状態(ローカル変数や保留中のtry文を含む)を記憶します。ジェネレーターが再開されると、中断した場所から処理を続行します(毎回新たに開始される通常の関数とは対照的です)。<\/P><\/P>generator expression<\/STRONG><\/P>イテレータを返す式です。通常の式に続いてfor<\/SPAN><\/A>式があり、ループ変数、範囲、およびオプションでif<\/SPAN><\/A>式が定義されています。この結合された式は囲む関数に値を生成します:<\/P>>><\/SPAN>><\/SPAN> sum(<\/SPAN>i*< \/span>i iter() 関数、または for ループで使用します。イテレータでこれを試みると、前回のイテレーションパスで使い果たされた同じイテレータオブジェクトが返されるだけで、空のコンテナのように見えます。
<\/P>
このブログ投稿シリーズは、反復処理の文脈で
Pythonで反復処理について話すとき、多くの用語や表現が議論に関連することがあります。このブログ投稿シリーズに特に重要で関連性があると考える5つの用語は次のとおりです:<\/P>
generator<\/STRONG><\/P>イテレータを返す関数です。通常の関数のように見えますが、forループで使用できる一連の値を生成するための
>><\/SPAN>><\/SPAN> sum(<\/SPAN>i*< \/span>i
sequence
整数インデックスを使った効率的な要素アクセスをサポートし、__getitem__() 特殊メソッドを持ち、シーケンスの長さを返す len() メソッドを定義する iterable です。組み込みのシーケンスタイプには list、str、tuple、および unicode があります。なお、dict も __getitem__() と __len__() をサポートしていますが、整数ではなく任意の immutable キーを使うため、シーケンスではなくマッピングと見なされます。
以前の ArcGIS Resources の用語集(現在は名前が変わり GIS Dictionary として Esri Support に収められている)と比べて、Python Glossary はかなり充実しています。ただし、Python Glossary は答えを既に知っている人には理解しやすいものの、言語初心者には少し難しいかもしれません。
上記の用語集抜粋を見ると、いくつかの特別な/マジック/ダンダーメソッドがイテレーションに非常に重要であることがわかります: __iter__(), __getitem__(), および next()(Python 3.x を使っている場合は __next__())。また、それらのメソッドと連携する重要な組み込み関数もあります:iter() と next()。そして最後に、for ループと yield 文です。イテレーションには他にも多くのメソッド、関数、文、および制御構造がありますが、上述したものが議論の中心です。イテレータやジェネレータ、シーケンスなどについてもっと知りたい読者向けに、多数の入門書やチュートリアルが既に書かれており、Google 検索ですぐに見つけられます。
リストは Python で非常に一般的で、新規ユーザーは早い段階で触れるため、ArcPy Data Access search cursor の例と並行して Python list の例を文脈として使用します。Python Glossary はリストを「組み込み Python シーケンス」と定義し、シーケンスは「整数インデックスを使った効率的な要素アクセスをサポートする iterable」と説明しています。ArcPy の Data Access SearchCursor ドキュメントでは検索カーソルが「タプルのイテレータを返す」と述べています。イテレータも iterable なので、リスト操作によく使われる組み込み関数や式が ArcPy カーソルでも使える感覚が得られます。
組み込みの dir() 関数でオブジェクトの有効な属性リストを取得しようとすることもできますが、その方法だとイテレーションに関係ない属性も含まれて煩雑になるため今回は控えます。代わりに組み込みの isinstance() 関数と組み込みの abstract base classes (ABCs) を使ってイテレーション特性を調べます。
>>
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.