Modification parce que le code initial était confus.Les décorateurs ne devraient pas avoir d'effets secondaires?
Je suppose que ces deux choses à même,
#I would use either of these
#Option 1
def bar(*args):
pass
foo = deco(bar)
#Option2
@deco
def foo(*args):
pass
Toutefois, si les décorateurs deco
a des effets secondaires, ce n'est pas garantie. En partcicular, ce fut ma ecpectation former un décorateur (pas d'effet secondaire), et je suis tombé sur un avec le côté effct et a été mordu par elle,
#Option1
def bar(*args):
pass
foo = register.filter(bar)
#Option 2
@register.filter
def foo(val, arg):
pass
Alors est mon attente mal, ou est django étant incompatible avec la les meilleures pratiques?
Un fil à partir de 2004 par Jim Hugunin semble penser. http://mail.python.org/pipermail/python-dev/2004-April/044133.html – agiliq
Une question a été posée ci-dessous, ajoutant ainsi que, la barre est un autre appelable. – agiliq
vos exemples n'ont aucun sens, parce que vous jetez le foo que vous définissez. vous utiliseriez la déco pour décorer foo, donc vous obtenez un nouveau truc. – hop