出于调试目的,我想编写一个函数来执行以下操作:
我曾想过用函数装饰器(我以前从未使用过)来实现这一点。你知道吗
实际上,我想替换一些print()
,我在一些点中放了这些print()
来显示中间值,同时学习函数装饰器。你知道吗
我不想创建一个类来实现这一点。这是我的方法,但行不通:
import logging
FORMAT = '%(asctime)s %(levelname)s %(message)s %(funcName)s'
logging.basicConfig(filename='example.log', level=logging.DEBUG, format=FORMAT, datefmt='%m/%d/%Y %I:%M:%S %p')
def debug(func):
def _debug(deb=0, *args, **kwargs):
if deb == 1:
print(msg)
func(*args, **kwargs)
if deb == 2:
logging.debug(msg)
return _debug
@debug
def echo(msg, deb=0):
pass
if __name__ == "__main__":
debug_mode = 1
echo("This is a debugging message!", debug_mode)
如果我不需要传递param debug_模式,并且在decorator函数中,我可以直接从__main__
使用debug状态,那就更好了。你知道吗
代码的问题在于传递参数的方式。当你做
echo("This is a debugging message!", debug_mode)
的时候,你实际上是在调用def _debug(deb=0, *args, **kwargs)
,所有的参数都是乱七八糟的(deb
变成了"This is a debugging message!"
等等)。关于StackOverflow,有一个关于如何使用decorator的惊人的tutorial。你知道吗我不知道为什么在代码中需要
*args, **kwargs
。我个人认为在你的特殊情况下没有必要做任何装饰。不管怎样,出于教育目的,与装饰师一起工作的代码可能如下所示:以及输出:
相关问题 更多 >
编程相关推荐