首页 > 解决方案 > python日志记录中字符串的延迟评估:比较`%`和`.format`

问题描述

这两个调用之间有什么区别:

import logging

logging.getLogger().debug('test: %i' % 42)

logging.getLogger().debug('test: {}'.format(42))

当我们将其转换为产生最终答案为 42 的字符串时,我们假设42的地方被一些长时间的计算(比如 750 万年的计算)所取代。

如果日志记录设置为调试,第一种方法是否会延迟评估?

标签: pythonstringlogging

解决方案


两者都不懒惰。两个字符串在发送到记录器之前都被插值。python 日志记录方面的延迟评估是使用单独的参数完成的。文档https://docs.python.org/2/library/logging.html建议以下内容用于字符串插值的惰性求值;

logging.getLogger().debug('test: %i', 42)

TL;DR 在这种情况下,更容易考虑以下内容。我们向记录器发送了一个原始类型(字符串)但只有一个参数。所以不能偷懒。


推荐阅读