2012-08-31 2 views
-1

데코레이터의 두 위치간에 차이점이 있습니까?python - 함수를 반환 할 때 데코레이터 위치 간의 차이점

def a(): 
    @decorator_function # HERE 
    def b(): 
     pass 
    return b 

@decorator_function # OR HERE ? 
c = a() 
+0

과 동일 *입니다 *'전에 장식을 배치의 차이 a()'대신'b()'를 사용한다. 그러나 @BrenBarn과 마찬가지로 두 번째 구문은 유효한 구문이 아닙니다. –

+0

나는이 질문을 썼을 때 내 마음을 통해 무슨 일이 일어 났는지 알 수 없다. : O –

답변

2

BrenBren이 말한 것처럼 코드가 작동하지 않습니다. 어쨌든 우선, 장식 자 구문은 단지 구문 설탕입니다. 두번째는 폐쇄 a() 장식 될 것이지만

@deco 
def func(): 
    pass 

def func(): 
    pass 
func = deco(func) 

그래서 심지어 정확한 구문을 가정 동등, 첫 번째 예는 밀폐 기능 b() 장식된다. 그래서 :

@deco 
def a(): 
    def b(): 
     pass 

def a(): 
    def b(): 
     pass 
a = deco(a) 

def a(): 
    @deco 
    def b(): 
     pass 

같은 것은이

def a(): 
    def b(): 
     pass 
    b = deco(b) 
5

시도해 보셨습니까? 두 번째 구문은 유효한 구문이 아닙니다. 그래, 차이점은 첫 번째 것은 유효하고 두 번째 것은 유효하지 않다는 점입니다.

+0

두 번째가 유효하지 않다고 생각했지만 테스트 할 시간이 없었습니다. (+1) – mgilson

+0

장고와 함께 시도했지만 그것은 잘 작동하지 않았지만 어떤 오류도 제기하지 않았다. –

관련 문제