ホームページ >バックエンド開発 >Python チュートリアル >Python 3 の「range()」オブジェクトはどのようにして高速な包含チェックを実現するのでしょうか?
Python 3 range() オブジェクトの高速包含チェック
Python 3 の range() 関数は、見た目どおり、計算量が多いように見えるかもしれません。広範囲にわたるメンバーシップをチェックします。ただし、この期待を裏切る最適化された方法で動作します。
内部では、 range() は内容全体の事前計算を回避するスマート シーケンス オブジェクトを採用しています。代わりに、開始値、停止値、ステップ値を保存し、反復中にオンデマンドで数値を計算します。
重要なのは、range() オブジェクトが contains フックを実装して、メンバーシップをスキャンせずに効率的に計算することです。潜在的な値。このほぼ一定時間の操作により、範囲内のすべての整数を反復処理する必要がなくなります。
例として、カスタム範囲の実装を考えてみましょう。
class my_range: # Constructor with start, stop, and step values def __init__(self, start, stop, step): self.start = start self.stop = stop self.step = step # Generator for iterating through the range def __iter__(self): current = self.start if self.step < 0: while current > self.stop: yield current current += self.step else: while current < self.stop: yield current current += self.step # ... (additional methods for length, indexing, etc.) ... # Optimized containment check def __contains__(self, num): # Calculate if num is in the range return (num - self.start) % self.step == 0
このカスタム実装には、 Python range() オブジェクト。後者の最適化された性質を示します。 range() オブジェクトは、メモリを効率的に管理し、大幅な計算オーバーヘッドを発生させずに包含チェックを実行するため、範囲を操作するための堅牢かつ高速なツールになります。
以上がPython 3 の「range()」オブジェクトはどのようにして高速な包含チェックを実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。