如何用verbose,Python打印函数的开始和结束?

2024-04-26 11:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经写了一段很好的代码,我希望改进我的详细输出。我在函数的开始和结尾都有一个if verbose: print '**** function_name ****'的想法,甚至定义了一个函数,使其更易于调用(我使用的是kindall here编写的非常性感的详细打印)

def verbwrap(function, side):
    if side=='start':
        verboseprint(' ******  %s  ******' %(function))
    if side=='end': 
        verboseprint(' ^^^^^^  %s  ^^^^^^' %(function))

为了像这样使用它:

^{pr2}$

有没有办法让我只调用一次重新加工的verbwrap()?再多的修修补补也没有让我找到答案!在


Tags: 函数代码nameverboseifhere定义结尾
1条回答
网友
1楼 · 发布于 2024-04-26 11:22:09

考虑到您只想在函数的开始和结束处打印内容,那么最好的方法就是使用decorator。在

def verbwrap(function):
    def wrapper(*args, **kwargs):
        verboseprint(' ******  %s  ******' %(function.__name__))
        result = function(*args, **kwargs)
        verboseprint(' ^^^^^^  %s  ^^^^^^' %(function.__name__))
        return result
    return wrapper

现在将上面的修饰符与任何要调试的函数一起使用:

^{pr2}$

演示:

verboseTrue时:

 ******  test  ******
1
2
3
 ^^^^^^  test  ^^^^^^

verboseFalse时:

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

相关问题 更多 >