4

Python 2.xの欠点range(大きな範囲では非効率なリストを作成する) を認識しており、対応するイテレータが高速xrangeです。ただし、Python 3.x では、rangeは反復子であり、xrange削除されます。Python 2.x と Python 3.x で書かれたこれら 2 つのループを、コードが移植可能になり、反復子を使用するように記述する方法はありますか?

# Python 2.x
for i in xrange(a_lot):
    use_i_in_someway(i)

# Python 3.x
for i in range(a_lot):
    use_i_in_someway(i)

私は次のようなことをするかもしれないことを知っています

if(platform.python_version_tuple()[0] == '3'):
    xrange = range

しかし、私はハックらしくなく、特注ではないものを考えていました。

4

2 に答える 2

2

1つの代替方法は、 Python2とPython3の違いをラップするためのシンプルなユーティリティを提供するSixモジュールを使用することです。これは、変更なしでPython2と3の両方で動作するコードベースをサポートすることを目的としています。

于 2013-02-14T10:15:53.700 に答える
1

について心配する必要はありませんxrange()。2to3 は単純に に変換しrange()ます。ただし、移植可能なコードを作成している場合は、たとえばcompat.pyクロス python 機能をインポートするファイルを作成することをお勧めします。たとえば、pymongo ソースを参照してください: https://github.com/mongodb/mongo-python-driver/blob/master/bson/py3compat.py

于 2013-02-14T09:40:22.020 に答える