常に range() よりも xrange() を優先すべきですか? [重複] 質問する

常に range() よりも xrange() を優先すべきですか? [重複] 質問する

なぜそうなのか、そうではないのか?

ベストアンサー1

パフォーマンスに関しては、特に広い範囲で反復処理を行っている場合は、xrange()のほうが通常は優れています。ただし、 を好むケースもいくつかありますrange()

  • Python 3 では、は以前行っていたrange()ことを実行し、は存在しません。Python 2 と Python 3 の両方で実行されるコードを記述する場合は、 を使用できません。xrange()xrange()xrange()

  • range()実際には、いくつかのケースではより高速になることがあります。たとえば、同じシーケンスを複数回反復する場合などです。xrange()毎回整数オブジェクトを再構築する必要がありますが、range()実際の整数オブジェクトが得られます。(ただし、メモリの点ではパフォーマンスが常に低下します)

  • xrange()実際のリストが必要なすべてのケースで使用できるわけではありません。たとえば、スライスやリスト メソッドはサポートされていません。

range()[編集] 2to3ツールによってどのようにアップグレードされるかについて言及している投稿がいくつかあります。記録のために、いくつかのサンプル使用法でツールを実行した出力を以下に示しますrange()xrange()

RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: ws_comma
--- range_test.py (original)
+++ range_test.py (refactored)
@@ -1,7 +1,7 @@

 for x in range(20):
-    a=range(20)
+    a=list(range(20))
     b=list(range(20))
     c=[x for x in range(20)]
     d=(x for x in range(20))
-    e=xrange(20)
+    e=range(20)

ご覧のとおり、for ループまたは内包表記内で使用される場合、またはすでに list() でラップされている場合、range は変更されません。

おすすめ記事