Pythonでは@
キーワードを使って関数などのオブジェクトをmodifyできます。
>>> @dec
... def func():
... pass
と書くと、実際には
>>> def func():
... pass
...
>>> func = dec(func)
の動作となり、関数func
をmodifyできる形になります。
ちなみに、このデコレータはネストも可能で、
>>> @dec2
... @dec1
... def func():
... pass
と書くと、
>>> func = dec2(dec1(func))
となります。