2017-11-15 9 views
2

Pythonでの評価はどれほど怠惰ですか?私はpythonの長いリストのパフォーマンスの低下logging.debug()

logging.debug('My very long list: %s' % list(x for x in long_generator))

とログイン有効なレベルのようなコードをお持ちの場合はデバッグメッセージが無視されるようですが、私はこの行を持つため、パフォーマンスの低下を招くのですか?

+0

Pythonでの遅延評価はありません。 –

答えて

4

これは遅れて評価されることはありませんが、Pythonのログにはこの問題の解決策があります:isEnabledFor()

if logger.isEnabledFor(logging.DEBUG): 
    logger.debug('My very long list: %s' % list(x for x in long_generator)) 

あなたのリストが構築され、ロガーのレベルがDEBUGよりも高い場合のみをフォーマットされます。

2

デバッグメッセージが無視されても、logging.debug()を呼び出す前にlist(x for x in long_generator)が作成されるため、パフォーマンスが低下します。

Pythonではレイジー評価はありません。すべての行は、次の行の前に評価/実行されます。これは、式が変数にバインドされているときに式が評価されることを意味します。

関連する問題