Python decorators demystified