Evita que el decorador se use dos veces en la misma función en python

Tengo un decorador:

from functools import wraps
def d(f):
    @wraps(f)
    def wrapper(*args,**kwargs):
        print 'Calling func'
        return f(*args,**kwargs)
    return wrapper

Y quiero evitar que decore la misma función dos veces, por ejemplo, evitar cosas como:

@d
@d
def f():
   print 2

La única solución posible que se me ocurre es usar un dict para almacenar las funciones que el decorador ya ha decorado y generar una excepción si se le pide decorar una función que existe en el dict. Dile si tienes una idea mejor ...

Respuestas a la pregunta(4)

Su respuesta a la pregunta