2011-01-23 7 views
36

ドキュメントでは、Pythonインタプリタが詳細を問わずに「基本的な最適化」を実行するとしか言いません。明らかに、それは実装に依存しますが、どのようなタイプのものを最適化できるか、実行時にどれくらいの節約を生み出すことができるかを感じる方法はありますか?Python最適化(-OまたはPYTHONOPTIMIZE)は何をしますか?

-Oを使用することに欠点はありますか?

私が知っている唯一のことは、-Oがassertを無効にすることですが、生産中でも間違っている可能性があるものについてはassertを使用しないでください。 Pythonの2.7で

+1

可能重複[Pythonの基本的な最適化モードを使用することは何ですか? ( 'python -O')](http://stackoverflow.com/questions/1693088/what-is-the-use-of-pythons-basic-optimizations-mode-python-o) – tzot

答えて

45

-Oは、次のような効果があります:.pyo

  • sys.flags.optimize gets set to 1
  • __debug__

    • バイトコード拡張の変更を
    を実行されません
  • 偽アサートされます

    さらに-OOh次の効果として:

    利用できない 、Py_OptimizeFlagのソースコードをgrepします。公式ドキュメントへ

    リンク:のhttps://docs.python.org/2.7/tutorial/modules.html#compiled-python-files

  • +1

    そこには欠点がありますか? -Oの組み込みのデバッグ情報の欠落とは別にフラグ? – max

    +7

    私は、docstringsが利用可能であると想定している多くのPythonモジュールを見てきました。例えば、私が働いている会社ではraw SQLがdocstringに置かれ、関数デコレータで冗談)。いくぶん少ない頻度で、assertは、コード内のある点の不変な期待を宣言するのではなく、論理関数を実行するために使用されるため、そのようなコードも破損します。 – SingleNegationElimination

    +1

    @max:上のセマンティクな変更の完全なリストを読むと、それらのいずれかが「欠点」であると考えますか?そうでなければ、欠点はありません。私は個人的には、バイトコードファイルの名前が変わるという不利な点を考慮しています。それはディスクの乱雑さに寄与しています。 「組み込まれていないデバッグ情報が欠落しています」がリストにないことに注意してください。 pdbはうまく動作し続けます(これは以前のPythonリリースでは当てはまりませんでした。ここで-Oはpdbのシングルステッピングのサポートを中止しました)。 –

    関連する問題