让我们定义一个debug
函数,用于调试目的:
def debug(x):
print(x)
return True
这个功能很快。但是,有时,调用debug
时评估的参数处理速度很慢:
def slow_processing(x):
time.sleep(x)
return 'Now!'
所以,基本上,在我们的代码中,我们可以看到像这样的行:
[...]
debug(slow_processing(1))
[...]
我希望避免执行debug
并在__debug__ == True
时评估其参数。这意味着我可以这样做:
if __debug__:
debug(slow_processing(1))
甚至这个,这有点短:
assert debug(slow_processing(1))
使用-O
选项运行Python时,代码将不会执行,也不会评估其参数。
但是,这需要修改源代码中每次调用的代码。我想知道Python中是否有一种方法(有时让我感到惊讶的是它的魔力)以一种未执行的方式声明该函数,并且在__debug__ == True
时不评估其参数但不必修改源每次调用debug
的代码。
答案 0 :(得分:3)
如果执行包含调用的代码,则无法阻止对参数的评估。
在这种情况下,最好的办法可能是更改调试调用和函数定义,并将函数作为第一个参数:
def debug(fn, *args, **kw):
if __debug__:
print(fn(*args, **kw))
return True
然后你称之为:
debug(slow_processing, 1)
答案 1 :(得分:1)
我认为这实际上是不可能的。为了减少代码中的变化,我会使用像
这样的单行代码__debug__ and debug(slow_processing(1))
但邓肯的答案是一个更好的解决方案!