데코레이터의 두 위치간에 차이점이 있습니까?python - 함수를 반환 할 때 데코레이터 위치 간의 차이점
def a():
@decorator_function # HERE
def b():
pass
return b
@decorator_function # OR HERE ?
c = a()
데코레이터의 두 위치간에 차이점이 있습니까?python - 함수를 반환 할 때 데코레이터 위치 간의 차이점
def a():
@decorator_function # HERE
def b():
pass
return b
@decorator_function # OR HERE ?
c = a()
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)
시도해 보셨습니까? 두 번째 구문은 유효한 구문이 아닙니다. 그래, 차이점은 첫 번째 것은 유효하고 두 번째 것은 유효하지 않다는 점입니다.
두 번째가 유효하지 않다고 생각했지만 테스트 할 시간이 없었습니다. (+1) – mgilson
장고와 함께 시도했지만 그것은 잘 작동하지 않았지만 어떤 오류도 제기하지 않았다. –
과 동일 *입니다 *'전에 장식을 배치의 차이 a()'대신'b()'를 사용한다. 그러나 @BrenBarn과 마찬가지로 두 번째 구문은 유효한 구문이 아닙니다. –
나는이 질문을 썼을 때 내 마음을 통해 무슨 일이 일어 났는지 알 수 없다. : O –