python2およびpython3バージョンで互換性のあるSix Moduleを使用してコードを移行する方法[閉じる]

python2およびpython3バージョンで互換性のあるSix Moduleを使用してコードを移行する方法[閉じる]

私はpython2とpython3のバージョンで私のコードと互換性のある6つを提供したいと思います。私はオンラインで例を得ましたが、以下のコードから6つの例を得ることができるより多くのソースを取得できませんでした。テストケース用に次の行を作成しました。

class SampleTests(unittest.TestCase):

そしてメイン内部ではクラスをどのように呼び出したのか、メイン内部ではクラスをどのように呼び出しSampleTestsましたか?unittest.main()

可能であれば、6つのモジュール移行のサンプル例をいくつか提供してください。

import six
from six.moves import reduce
import unittest


def multiply_values(val1, val2):
    return val1*val2

def add_values(val1, val2):
    return val1+val2

class SampleTests(unittest.TestCase):    
    def test_sets_equal(self):
        setValue1 = reduce(multiply_values, [1,2])
        setValue2 = reduce(add_values, [1,2])
        six.assertCountEqual(self, [2,3], [setValue1,setValue2])
    
if __name__ == '__main__':
    unittest.main()

答え1

あなたの例では、six次の2つの目的に使用されます。

  • reducePython 3では削除されており、functools.reducesoに置き換えてsix便利な「別名」を提供するため、reduce2と3の両方で呼び出すことができます。
  • assertCountEqualPython 3の単体テストの一部なので、sixここではPython 2の独自の実装を提供します。

モジュールに関する最高のドキュメントsixは、以下で確認できます。https://six.readthedocs.io/

注:Python 2は現在廃止されており、新しいプロジェクトには使用しないでください。six両方のバージョンのPythonで動作するコードを書くのに役立ちますが、Python 2をサポートする妥当な理由がない場合は、より良いでしょう。 Python 3専用コードを記述します。2to3ツールPython 2コードをPython 3に変換するのに役立ちますか?

テストケース用のクラスを作成して次の行を作成した理由

これは実際には具体的な質問ではありませんsix。これはunittestモジュールがPython 2と3の両方で動作する方法です。https://docs.python.org/3/library/unittest.html詳細については。

TL; DRバージョン:unittest.main()ファイル内のすべてのテストケースを自動的に実行し、テストケースはクラスtest_で名前が始まる関数として定義されますunittest.TestCase

関連情報