gpt4 book ai didi

Python:切换 "verbose"输出的最有效方法?

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:19 27 4
gpt4 key购买 nike

因此,我有一个包含大量调试输出的脚本,我可以使用 -v 标志打开/关闭这些输出。我当前的代码如下所示:

def vprint( obj ):
if args.verbose:
print obj

但是,我认为这是低效的,因为每次调用 vprint() 时,它都必须跳转到该函数并检查 args.verbose 的值.我想出了这个,它应该稍微更有效率:

if args.verbose:
def vprint( obj ):
print obj
else:
def vprint( obj ):
pass

虽然现在删除了 if,但它仍然必须跳转到该函数。所以我想知道是否有一种方法可以将 vprint 定义为类似于无处可去的函数指针,因此它可以完全跳过它?或者 Python 是否足够聪明,知道不要将时间浪费在一个只是pass 的函数上?

最佳答案

除非您的性能分析将您带到这里,否则它可能不值得优化。一组快速测试产生了超过 1000000 次迭代的微小 (0.040) 改进:

         1000004 function calls in 0.424 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.424 0.424 <string>:1(<module>)
1 0.242 0.242 0.424 0.424 test.py:14(testit)
1 0.000 0.000 0.424 0.424 test.py:21(testit1)
1000000 0.182 0.000 0.182 0.000 test.py:6(vprint)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}


1000004 function calls in 0.408 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.408 0.408 <string>:1(<module>)
1000000 0.142 0.000 0.142 0.000 test.py:10(vprint2)
1 0.266 0.266 0.408 0.408 test.py:14(testit)
1 0.000 0.000 0.408 0.408 test.py:18(testit2)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

测试代码如下;

#!/usr/bin/python

import cProfile

verbose=False
def vprint(msg):
if verbose:
print msg

def vprint2(msg):
pass

def testit(fcn):
for i in xrange(1000000):
fcn(i)

def testit2():
testit(vprint2)

def testit1():
testit(vprint)

if __name__ == '__main__':
cProfile.run('testit1()')
cProfile.run('testit2()')

关于Python:切换 "verbose"输出的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14966204/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com