views:

711

answers:

4

I know of @staticmethod, @classmethod, and @property, but only through scattered documentation. Is there a complete list of function decorators that are built into Python?

+7  A: 

I don't think so. Decorators don't differ from ordinary functions, you only call them in a fancier way.

For finding all of them try searching Built-in functions list, because as you can see in Python glossary the decorator syntax is just a syntactic sugar, as the following two definitions create equal functions (copied this example from glossary):

def f(...):
    ...
f = staticmethod(f)

@staticmethod
def f(...):

So any built-in function that returns another function can be used as a decorator. Question is - does it make sense to use it that way? :-)

functools module contains some functions that can be used as decorators, but they aren't built-ins you asked for.

Abgan
+2  A: 

They're not built-in, but this library of example decorators if very good.

As Abgan says, the built-in function list is probably the best place to look, although as decorators can also be implemented as classes, it's not guaranteed to be comprehensive.

Alabaster Codify
A: 

There is j such thing as a list of all decorators. There's no list of all functions. There's no list of all classes.

Decorators are a handy tool for defining a common aspect across functions, methods or classes. There's the built-in decorators. Plus there are any number of cool and useless decorators. In the sake way there are any number of cool and useless classes.

S.Lott
+1  A: 

Decorators aren't even required to return a function. I've used @atexit.register before.

Aaron Gallagher
Well, that one returns the same function passed to it for that very purpose.
Benjamin Peterson
Oh, does it? I never noticed.
Aaron Gallagher