2012-06-09 16 views
19

Esistono convenzioni di denominazione "accettate" per le parti interne dei decoratori Python?Convenzioni di denominazione Python nei decoratori

Il style guide non lo menziona e this awesome entry about decorators è piuttosto coerente nell'uso delle varianti di "wrapped" per la funzione definitiva che viene restituita, ma per quanto riguarda i nomi utilizzati durante la creazione di decoratori che accettano argomenti?

def decorator_name(whatevs): 
    def inner(function): 
     def wrapped(*args, **kwargs): 
      # sweet decorator goodness 
     return wrapped 
    return inner 

particolare, quali sono le convenzioni per inner, function, e wrapped nell'esempio precedente?

risposta

17

Non ci sono convenzioni standardizzate (come PEP) per questi nomi. Se controlli lo stdlib di python troverai molti nomi diversi per quelle funzioni.

Tuttavia, decorator è un nome piuttosto comune per la funzione decoratore inner.
È anche comune chiamare la funzione wrapper e decorarla con functools.wraps(f) con f come funzione di avvolgimento (func è anche un nome comune per esso).

def decorator_name(whatevs): 
    def decorator(f): 
     @wraps(f) 
     def wrapper(*args, **kwargs): 
      pass # sweet decorator goodness 
     return wrapper 
    return decorator 
+5

func potrebbe essere più leggibile di f. – jfs

+3

Eh, se si dispone di una funzione a singolo argomento denominata 'decorator', allora è abbastanza chiaro quale sia il suo argomento indipendentemente dal suo nome. – Ben

+0

Chiamare la funzione interna 'decorator' è probabilmente una buona idea, dato che' decorator_name' non è in realtà un decoratore ma una * fabbrica di decorazioni *, e gli strati multipli della definizione di una funzione annidata possono essere un po 'confusi. – Ben

0

Per definizione, un decoratore in Python potrebbe essere una funzione o una classe, in modo che il tipo di implementazione (classe o funzione), è il fattore decisivo quale notazione da utilizzare. un errore comune è il prefisso del nome della funzione con il decoratore di parole chiave. per ulteriori informazioni sui decoratori vedere link

Problemi correlati