デバッグ出力を印刷するために、関数の周りにたくさんの印刷物が散らばっていることがあります。このデバッグ出力を切り替えるために、私はこれを思いつきました:
def f(debug=False):
print = __builtins__.print if debug else lambda *p: None
または、デバッグ メッセージとは別に何かを出力する必要がある場合は、デバッグ メッセージdprint
用の関数を作成します。
問題は、が呼び出され、関数呼び出しが遅いことが知られているためdebug=False
、このprint
ステートメントがコードを大幅に遅くすることです。lambda *p: None
だから、私の質問は次のとおりです。コードのパフォーマンスに影響を与えないように、これらすべてのデバッグ出力を効率的に無効にするより良い方法はありますか?
すべての答えは、logging
モジュールを使用していないことに関するものです。これは注目に値しますが、これは、コードを大幅に遅くする関数呼び出しを回避する方法に関する質問には答えません。ステートメントを含む行print
またはその他の方法)))。これらの回答が示唆するのは、さらに遅くなるはずの にprint
置き換えることです。logging.debug
この質問は、それらの関数呼び出しを完全に取り除くことに関するものです。
logging
の代わりにを使用してみましたがlambda *p: None
、当然のことながら、コードはさらに遅くなりました。
おそらく誰かが、これらのプリントが 25 の速度低下を引き起こしたコードを見たいと思うでしょう: http://ideone.com/n5PGu
logging
そして、私はモジュールに対して何も持っていません。ハックせずに常に堅牢なソリューションに固執することは良い習慣だと思います。しかし、これらのハックを 20 行の 1 回限りのコード スニペットで使用した場合、犯罪にはならないと思います。
print
制限ではありませんが、提案として、関数のソース コードからいくつかの行 (たとえば で始まる行) を削除して、再コンパイルすることは可能でしょうか? 以下の回答でこのアプローチを説明しました。その解決策についてコメントをいただきたいのですが、この問題を解決するための他のアプローチを歓迎します。