検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
>>
python_cookbook

Python Cookbook [Manually Consuming an Iterator : 手作業によるイテレーション操作] 投稿一覧へ戻る

Published 2020年4月24日21:08 by mootaro23

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

今回からイテレーション関連の tips を取り上げていきます。

Problem:

イテラブル (iterable) 中の要素を for ループを使わずに処理しろ、って、無茶言うよ、本当に。

Solution:

手作業でイテラブルを処理するには next() 関数を利用し、コード内で StopIteration 例外を捕まえるようにします。


例えば、ファイルから手作業で1行1行読み込んでいく処理は以下のようになります。

with open('../data/products.txt') as f:
try:
while True:
line = next(f)
print(line, end = '')
except StopIteration:
print('finish')



一般的には StopIteration がイテレーションの終了シグナルとして用いられますが、next() を「生身」で利用している場合には None のような値を代わりの終了シグナルとして返すことも可能です。

with open('../data/products.txt') as f:
while True:
line = next(f, None)
if line is None:
break
print(line, end = '')



イテラブルを処理する場合、for ステートメントを使用するケースがほとんどだと思います。


ただ、より綿密な反復処理コントロールが必要な場面に出くわさないとも限りません。


ですから、イテラブル処理において水面下で行われていることを知っておいても無駄ではないでしょう。


次の例は、イテレーション操作の基本的なメカニズムを示したものです。

items = [1, 2, 3]
my_iter = iter(items) # → items.__iter__() を呼び出してイテレーターを取得します。
next(my_iter) # → 1 [my_iter.__next__() を呼び出してイテレーターを動作させます。
next(my_iter) # → 2
next(my_iter) # → 3
next(my_iter) # → Traceback (most recent call last) StopIteration:



今回紹介した事項が次回以降のイテレーション関連の tips の大元になっています。


忘れずに頭の片隅に入れて置いてください。