プログラムとか 思ったこととか 徒然ブログ 投稿一覧へ戻る

タグ "Cookbook" が付いている投稿一覧

Python Cookbook [Implementing the Iterator Protocol : イテレータープロトコルの実装]

Tags: Python , Cookbook , generator , iterable , iteration , iterator , yield

Published 2020年5月9日9:29 by T.Tsuyoshi

Problem: イテレーションをサポートするカスタムオブジェクトを作成したいが、イテレータプロトコルの実装では苦労したくない。 Solution: イテレーションをサポートするオブジェクトを作成する一番簡単な手段は generator 関数を利用することでしょう。 " Delegating Iteration " の項で取り上げたクラスを再利用してみます。 今回は Node クラスとしてツリー構造を模倣し、ルート階層から子階層へとノードを縦断していくようなイテレータを実装します。 class Node: def __init__(self, value): self._value …

Python Cookbook [Creating New Iteration Patterns with Generators : ジェネレーターを利用した独自イテレーションパターンの実装]

Tags: Python , Cookbook , generator , iterable , iteration , yield

Published 2020年5月7日19:19 by T.Tsuyoshi

Problem: range() や reversed() といった組み込み関数とは異なるイテレーションパターンを実装したい。 Solution: generator 関数を利用して実装します。 例えば、ある範囲内、あるステップ数で浮動小数点数を生成したいなら次のようになるでしょう。 def float_range(start, stop, step): x = start while x < stop: …

Python Cookbook [Delegating Iteration : 独自クラスへのイテレーション機能の実装]

Tags: Python , Cookbook , iterable , iterator , __iter__

Published 2020年5月1日19:41 by T.Tsuyoshi

Problem: list や tuple といったイテラブルを属性値として含む独自のコンテナクラスがある場合に、そのクラス自体でイテレーション機能を提供したい。 Solution: クラス内で __iter__() メソッドを定義し、実態として、内部で保持するコンテナのイテレーターに動作をお任せするだけです、楽チンです。 class Topping: def __init__(self, value): self._value = value self._pizza = [] …

Python Cookbook [Manually Consuming an Iterator : 手作業によるイテレーション操作]

Tags: Python , Cookbook , next , StopIteration , iterable , iteration

Published 2020年4月24日21:08 by T.Tsuyoshi

今回からイテレーション関連の tips を取り上げていきます。 Problem: イテラブル (iterable) 中の要素を for ループを使わずに処理しろ、って、無茶言うよ、本当に。 Solution: 手作業でイテラブルを処理するには next() 関数を利用し、コード内で StopIteration 例外を捕まえるようにします。 例えば、ファイルから手作業で1行1行読み込んでいく処理は以下のようになります。 with open('../data/products.txt') as f: …

Python Cookbook [Manipulating Dates Involving Time Zones : タイムゾーンを考慮した日付操作]

Tags: Python , Cookbook , datetime , timedelta , Olson , pytz , timezone

Published 2020年4月23日22:37 by T.Tsuyoshi

Problem: 東京でテレワークをしている僕にニューヨークの同僚から電話。 「現地時間(2020年)4月27日午前9時30分から会議をするから、ちゃんと出席してね」。 さて、僕は何時にテレビ会議システムの前にいなきゃダメなんだろう? Solution: タイムゾーンが関係するほとんど全ての問題には pytz モジュールが使用できます。 Python3 からは、datetime モジュールで timezone クラスが提供されるようになりました。 また、PEP 431 で解説されているようにタイムゾーンサポートの改善に伴い pytz の使用は推奨されない可能性があります。 ただ、後半述べているような「タイムゾーンを扱う上での戦略」等の基本的な考え方は十分に通用するものです。 このパッケージは、多くの言語やオペレーティングシステムが標準のタイムゾーン情報として採用しているオルソンタイムゾーンデータベース …