我已经写了一大段代码,我正在寻求改进我的冗长输出。我想到了 if verbose: print '**** function_name ****'
在函数的开头和结尾,甚至定义了一个函数以使其更容易调用(我'我使用由 kindall 编写的非常性感的冗长打印 here )
def verbwrap(function, side):
if side=='start':
verboseprint(' ****** %s ******' %(function))
if side=='end':
verboseprint(' ^^^^^^ %s ^^^^^^' %(function))
打算像这样使用它:
import inspect
def test(lst):
verbwrap(inspect.currentframe().f_code.co_name,'start')
for i in lst:
print i
verbwrap('test', 'end') #equivalent to above, but easier to write :(
有没有办法让我只调用一次重新设计的verbwrap()
?没有多少修补让我找到答案!
最佳答案
考虑到您只想在函数的开头和结尾打印一些内容,那么最好的方法是使用装饰器。
def verbwrap(function):
def wrapper(*args, **kwargs):
verboseprint(' ****** %s ******' %(function.__name__))
result = function(*args, **kwargs)
verboseprint(' ^^^^^^ %s ^^^^^^' %(function.__name__))
return result
return wrapper
现在将上面的装饰器与您要调试的任何函数一起使用:
@verbwrap
def test(lst):
for i in lst:
print i
演示:
当 verbose
为 True
时:
****** test ******
1
2
3
^^^^^^ test ^^^^^^
当 verbose
为 False
时:
1
2
3
您可以通过计算 wrapper
函数内的 verbose
的值来使其更加动态,使用这种方法您可以决定在函数运行时调试或不调试实际被调用。
def verbwrap(function):
def wrapper(*args, **kwargs):
# Calculate the value of `verbose` here.
# Say you're reading it from a config etc
verbose = False
if verbose:
print ' ****** %s ******' %(function.__name__)
result = function(*args, **kwargs)
print ' ^^^^^^ %s ^^^^^^' %(function.__name__)
return result
else:
return function(*args, **kwargs)
return wrapper
关于python - 如何使用冗长的 Python 打印函数的开始和结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38301979/