0

トピック外の質問のように思えるかもしれませんが、プログラミングの正しい方法 (より効率的な方法) について疑問に思っています。

Web アプリケーションがあり、関数内で辞書キーに特定の値があることを確認する必要があるとします (または、任意のオブジェクト属性チェックに適用できます)。これらの方法のうち、(メモリまたは速度の点で) より効率的なのはどれですか? また、その理由は何ですか? または、これが間違った方法である場合、その理由は何ですか?

if myDictionary.get("xy") == "defined value":
    runSomeFunction(myDictionary.get("xy"))

また

myVar = myDictonary.get("xy", "")
if myVar == "defined value":
    runSomeFunction(myVar)

このコードへのアプローチ方法については、より多様な議論があるかもしれません。Web アプリケーション (1 分間に数百のリクエスト) または最適なプログラミング方法としての通常のスクリプトです。

ご意見をお寄せいただきありがとうございます。

4

2 に答える 2

4

この種のマイクロ最適化が関連している場合、スクリプト言語を使用することは間違ったテクノロジの選択です。したがって、一般的な「ベンチマーク」以外の唯一の適切な答えは次のとおりです。それは実際には問題ではありません。コードを読みやすくしてください。

より技術的な説明:dictハッシュ マップを使用して実装されます。つまり、O(1)ルックアップがあります。したがって、要素へのアクセスは非常に高速です。キーのハッシュを 2 回計算する必要がないため、一時変数の方が少し速いと思います。

100 万回の反復によるtimeitベンチマークは、次の時間を示しています。

  • 0.3209540843963623 (一時変数なし)
  • 0.3401560783386230 (一時変数)

したがって、一時変数を使用すると、実際には少し遅くなります。ただし、これは 1M の反復であることに注意してください。したがって、毎回の実際の平均差はわずか 0.00000002 秒でした。最適化する必要のないものをマイクロ最適化しないでください。代わりに、コードを読みやすくしてください。

于 2013-09-03T13:29:15.817 に答える