6

PythonクラスやJavaクラスを使用する必要があるかどうか、およびどのサークルで使用する必要があるかを理解しようとしています。

専門的なディクショナリ/マップの種類のクラスを作成する場合、Python の dict から、または Java の HashMap や TreeMap などから 1 つのサブクラスを作成する必要がありますか?

Python の方が単純で魅力的であるという理由だけで、Python のものを使用したくなります。しかし、Jython の実行が比較的遅い (私にはそう思われる) 理由の 1 つは、動的型付けと関係があるようです。残念なことに、私はこれらすべてについてそれほど明確ではなく、Python/Jython インタープリター コードを熟読するために夜間の時間を費やしていません。

とにかく、コードの作業が少なくて済むので、Java クラスの実行速度が速くなる可能性があると思います。OTOH多分それはもっとしなければならない. あるいは何も入っていないのかもしれません。誰でも知っていますか?

4

2 に答える 2

5

Jython を使用するポイントは、Python コードを記述して JVM 上で実行できることです。Python を Java にすることでそれを台無しにしないでください。

データ構造が遅すぎることが判明した場合は、ドロップインで Java バージョンに置き換えることができます。しかし、それはプログラミングの最適化段階のためのもので、後で行われます。


私はあなたの質問に答えようとするべきだと思います。ネイティブ Java 構造を使用した方が高速になると思いますが (JVM は Python インタープリターよりも多くのことを推測できるため)、Jython とのインターフェースに必要な余分な処理によって相殺される可能性があります。テストだけが教えてくれます!

于 2012-06-24T14:29:27.400 に答える
4

一般に、決定は速度の 1 つであってはなりません。Python クラスは、Java クラスから継承しなくても、とにかく Java クラスの観点から実装されます。したがって、速度はほぼ同等である必要があり、多くても操作ごとにいくつかのメソッド呼び出しを節約できます。

より大きな問題は、クラス何をするつもりかということです。Python API で使用している場合は、マッピング プロトコル全体 (クラスが変更するビットのみ) を実装する作業を行う必要がないように、Python 型、またはそのように動作するものを使用する必要があります。 )。Java API を使用している場合は、必ず静的型チェックを満たす必要があります。つまり、Java のクラスから継承する必要があります。

あなたの状況でこれに答えるのが簡単でない場合は、Python のものから始めてください。(正しく ;-) 「よりシンプルでセクシー」だと思うからです。クラスがプロジェクトの境界の外を通過しない場合、速度が本当に問題になった場合に後で変更するのは簡単なはずです。その時点で、「それを実装するのに役立つだろうか」などの質問についても考えているかもしれません。完全に Java レベルですか?」うまくいけば、これは今考えるには時期尚早の最適化であると認識しています。

于 2012-06-24T16:30:22.140 に答える