python 의 장식 기 역할 이해
예:
이것 은 코드 이지 만 기능 이 너무 적어 서 이것 을 강화 해 야 하지만 코드 를 바 꿀 수 없습니다.
def hello():
return "hello world!"
현재 우리 의 수 요 는 hello()함수 의 기능 을 강화 하 는 것 입 니 다.반환 에 HTML 라벨 을 추가 하 기 를 바 랍 니 다.예 를 들 어hello world.그러나 hello()함수 의 원래 정 의 를 바 꾸 지 말 라 고 요구 합 니 다.
def makeitalic(fun):#makitalic
def wrapped():#
return "<i>"+fun()+"</i>"#
return wrapped# wrapped
def hello():#
return "hello world!"
#makeitalic hello , fun() hello
hello_2=makeitalic(hello)
# , <i>hello world!</i>
print(hello_2())
원 함수 hello 의 기능 을 강화 하기 위해 함 수 를 정 의 했 습 니 다.원 함 수 를 매개 변수 로 받 아들 이 고 새로운 함 수 를 되 돌려 주 었 습 니 다.이 되 돌아 오 는 함수 에서 원 함 수 를 실 행 했 고 원 함수 의 기능 을 강화 하 였 습 니 다.사실 Makeitalic 는 장식 기(decorator)입 니 다.원 함수 hello 를 봉 하고 새로운 함 수 를 되 돌려 주 었 습 니 다.원 함수 의 기능 을 강화 하고 hello 에 값 을 부여 합 니 다.
일반적인 상황 에서 우 리 는 장식 기 가 제공 하 는@문법 사탕(Syntactic Sugar)을 사용 하여 위의 조작 을 간소화 합 니 다.
#### @
def makeitalic(fun):
def wrapped():
return "<i>" + fun() + "</i>"
return wrapped
@makeitalic# ,
def hello():
return "hello world"
print(hello())# ,
위의 경우 함수(또는 클래스)기능 을 동적 으로 수정 할 수 있 는 함수 가 장식 기 입 니 다.본질 적 으로 이것 은 고급 함수 로 장식 되 어 있 는 함수(예 를 들 어 위의 hello)를 매개 변수 로 하고 포 장 된 함수(예 를 들 어 위의 wrapped)를 수식 함수(hello)에 되 돌려 줍 니 다.hello()함 수 를 호출 할 때 hello 함수 의 실행 절 차 는 다음 과 같 습 니 다.
1.hello 함 수 를 매개 변수 로@기호 뒤의 장식 기 함수 에 전달 합 니 다.
2.그 다음 에 장식 기 함 수 를 실행 하고 포 장 된 함 수 를 되 돌려 주 는 동시에 원 함수 의 방향 을 바 꾸 었 습 니 다.현재 원 함수 가 이 포장 함 수 를 가리 키 고 있 습 니 다.
3.원 함 수 를 실행 합 니 다.사실은 이때 실 행 된 것 은 포 장 된 함수 입 니 다.그래서 장식 기 는 기 존 함수 의 기능 을 강화 하지만 기 존 함수 의 정 의 를 바 꾸 지 않 습 니 다.
일반 장식 기의 사용 형식:
@decorator
def fun():
pass
# :
def fun():
pass
fun = decorator(fun)#
장식 기 는 여러 개 를 정의 할 수 있 습 니 다.함수 정의 에서 가장 가 까 운 장식 기 가 가장 먼저 호출 됩 니 다.예 를 들 어:
@decotator_one
@decorator_two
def fun():
pass
# :
def fun():
pass
fun = decorator_one(decorator_two(fun))
장식 기 는 파 라 메 터 를 가 져 갈 수 있 습 니 다.예 를 들 어:
@decorator(arg1, arg2)
def fun():
pass
# :
def fun():
pass
fun = decorator(arg1, arg2)(fun)
python 의 인 테 리 어 역할 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python 인 테 리 어 역할 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.