2012-06-09 10 views
19

파이썬 데코레이터의 내부 용으로 "허용 된"이름 지정 규칙이 있습니까?데코레이터에서의 Python 명명 규칙

style guide은 언급하지 않으며 this awesome entry about decorators은 반환되는 궁극적 인 함수에 대해 "wrapped"변형을 사용하여 일관성이 있지만 인수를 사용하는 데코레이터를 만들 때 사용되는 이름은 무엇입니까?

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

즉, 위의 예에서 inner, functionwrapped위한 규칙은 무엇인가?

답변

17

해당 이름에 대한 표준화 된 규칙 (예 : PEP)이 없습니다. python stdlib를 확인하면 해당 함수에 대해 다른 이름을 많이 볼 수 있습니다.

그러나 decorator은 데코레이터 기능 inner의 다소 일반적인 이름입니다.
wrapped 함수 wrapper을 호출하고 functools.wraps(f)으로 꾸밀 수 있습니다. f은 줄 바꿈 된 함수입니다 (func도 일반 이름 임).

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

func가 f보다 읽기 쉽습니다. – jfs

+3

어, 만약 당신이'decorator'라는 이름의 단일 인자 함수를 가지고 있다면, 그것이 무엇인지에 상관없이 인자가 무엇인지는 꽤 분명합니다. – Ben

+0

내부 함수'decorator'를 호출하는 것은 아마도 매우 좋은 생각입니다. 왜냐하면'decorator_name'은 실제로 데코레이터가 아닌 * 데코레이터 팩토리 *이므로 중첩 된 함수 정의의 여러 레이어가 약간 혼란 스러울 수 있습니다. – Ben

0

이 정의에 의하면, 파이썬에서 장식 함수 또는 클래스, 그래서 구현의 유형 (클래스 또는 함수)이 될 수 명명 규칙을하면 사용할 결정 요인이다. 일반적인 실수는 함수의 이름 앞에 키워드 decorator를 붙이는 것입니다. 장식 자에 대한 자세한 내용은 을 참조하십시오. link