Dav*_*rks 0 python string logging
这两个电话之间有什么区别:
import logging
logging.getLogger().debug('test: %i' % 42)
Run Code Online (Sandbox Code Playgroud)
和
logging.getLogger().debug('test: {}'.format(42))
Run Code Online (Sandbox Code Playgroud)
我们假设42在被投射到字符串(例如750万年)时会被一些长计算所取代,产生最终答案为42.
在将日志记录设置为调试的情况下,是否对前一种方法进行了延迟评估?
我会查看我在评论中发布的参考资料,以获取有关 和 的更多详细%信息.format()。
对于惰性评估问题,答案是否定的。
\n\n一个简单的测试就可以了
\n\ndef func1(x):\n time.sleep(5)\n return(x)\n\ndef func2(x):\n #time.sleep(5)\n return(x)\n\n%timeit 'debug1: %s' % func1(3)\n5 s \xc2\xb1 1.31 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\n%timeit 'debug2: {}'.format(func1(3))\n5 s \xc2\xb1 1.45 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\n\n%timeit 'debug1: %s' % func2(3)\n297 ns \xc2\xb1 11.2 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\n%timeit 'debug2: {}'.format(func2(3))\n404 ns \xc2\xb1 4.56 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n\n在.format(显然)和%方法中,func()无论如何都会被计算。
都不是懒惰的.在发送到记录器之前,两个字符串都被插值.在python日志记录方面的惰性评估是使用单独的参数完成的.文档https://docs.python.org/2/library/logging.html建议使用以下内容来进行字符串插值的延迟评估;
logging.getLogger().debug('test: %i', 42)
Run Code Online (Sandbox Code Playgroud)
TL; DR 在这种情况下,更容易考虑以下内容.我们向记录器发送了一个原始类型(字符串)但只有一个参数.因此它不能是懒惰的.
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |