如何使用详细 Python 打印函数的开始和结束?
How do I print start and end of function with verbose, Python?
我已经写了一大堆代码,我希望改进我的冗长输出。我想到了在函数的开始和结束处使用 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
我已经写了一大堆代码,我希望改进我的冗长输出。我想到了在函数的开始和结束处使用 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