考虑一下这个Python片段:
def someTestFunction(): if someTest: return value1 elif someOtherTest: return value2 elif yetSomeOtherTest: return value3 return None def SomeCallingFunction(): a = someTestFunction() if a != None: return a ... normal execution continues
现在,问题是:SomeCallingFunction开始时的三行段获取测试函数的值,如果它不是None,则在许多其他函数中经常重复.三条线太长了.我想把它简化为一个.我怎么做?
我可以自由地重构这个代码,然而someTestFunction的内容却需要.我想过使用异常,但这些似乎没有帮助减少调用代码长度.
(我已经阅读了一些关于Python装饰器的内容,但是没有使用过它们.这会是不是这个地方?它会如何工作?)
如果你想使用装饰器,它看起来像这样:
def testDecorator(f): def _testDecorator(): a = someTestFunction() if a is None: return f() else: return a return _testDecorator @testDecorator def SomeCallingFunction(): ... normal execution
首次导入模块时,它会运行testDecorator
,并将原始模块SomeCallingFunction
作为参数传递给它.返回一个新函数,并绑定到该SomeCallingFunction
名称.现在,无论何时调用SomeCallingFunction
,它都会运行其他函数,它会执行检查,并返回a
原始结果或者原始结果SomeCallingFunction
.