1

オブジェクトをメソッドに渡す 2 つの異なる方法でベンチマークを実行しましたが、暗黙的なオブジェクトの受け渡しは、明示的な方法よりも時間がかかりませんでした。私の本によると、これらは同一のプロセスです。何が違いを説明していますか?

まず、クラス定義は次のとおりです。

class Point:
    def reset(self)
        self.x = 0
        self.y = 0

したがって、次の 2 つのコード セットのそれぞれで「timeit」を実行すると、最初のコードはループあたり 317 ns を返し、2 番目はループあたり 400 ns を返します。以下は、オブジェクトとメソッドを渡す暗黙的なコードです。Python は、オブジェクトをバックグラウンドでメソッドに渡します。

p = Point()
p.reset()

そして、ここに明示的な代替手段があります:

p = Point()
Point.reset(p)

ベンチマークの違いを説明するメモリ割り当てレベルで何が起こっているのか誰か教えてもらえますか? ある方法は他の方法よりも「pythonic」ですか? プログラマーが (速度を超えて) どちらか一方を選択するのはなぜですか?

ありがとうございました、

マイケル

4

1 に答える 1

0

最初のメソッドは、 class の classmethod ではなくreset、 object のメソッドであるため、より Pythonic であると思います。違いは基本的に、メソッドがクラスに属しているのか、それともクラスのオブジェクトに属しているのかということです。pPointresetPointPoint

最初のメソッドを使用するとコードが理解しやすくなり、2 番目のスタイルを実行する場合は、メソッドがインスタンスからでstaticmethodはなく から呼び出されることを示すために、それをclass)。

これは純粋に私の経験からです。

于 2013-03-28T01:05:44.017 に答える