なぜそうなのか、そうではないのか?
ベストアンサー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 は変更されません。