몇 년 전 처음 Python을 배웠을 때, 데코레이터를 볼 때, 지우인 매뉴얼에 나오는 이상한 단어를 이해할 수 없다고 느꼈던 기억이 납니다. 사실 데코레이터는 이해하기 매우 어려운 개념이라고 생각합니다. 많은 초보자들이 이런 혼란을 겪어야 하기 때문에 이 글에서는 Python의 데코레이터에 관한 관련 정보를 주로 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다.
이 글을 읽고 나면 데코레이터가 무엇인지 자세히 알아볼 수 있습니다.
1. 데코레이터
인터넷에서 데코레이터에 대해 어떤 분들이 이렇게 댓글을 주셨는데, 글도 참 흥미롭고 비유도 생생한 것 같아요
누구나 가지고 있는 속옷은 부끄러움을 가리기 위해 주로 사용하지만, 겨울에는 바람과 추위로부터 우리를 지켜줄 수 없습니다. 어떻게 해야 할까요?
우리가 생각한 방법 중 하나는 속옷을 더 두껍고 길게 변형하는 것이었습니다. 이렇게 하면 수치를 가려주는 기능뿐만 아니라 따뜻함도 제공합니다. 문제는 이 속옷을 바지로 변형한 후에도 여전히 수치심을 가리는 기능은 있지만 본질적으로 더 이상 진짜 속옷이 아니라는 것입니다. 그래서 똑똑한 사람들이 바지를 발명하고
왜 입문 장 마지막에 데코레이터에 대해 이야기해야 할까요? 너무 어렵고 내용도 많기 때문에 전제 조건을 이해해야 합니다. 모두가 Python의 함수를 이해한다고 생각합니다. 하지만 함수도 객체이고 매개변수처럼 전달될 수 있다는 것을 알고 계셨나요? 다음 예를 살펴보겠습니다.
1) 함수도 객체입니다
def message(word='hello'): return word.upper()+'!' print message() >> HELLO! my_message=message print my_message >> <function message at 0x000000000288E198> print my_message() >> HELLO!즉, 메시지를 다른 변수에 할당할 수 있습니다
2) 함수는 다른 함수 내부에 중첩되어 정의될 수 있습니다
def show(): print 'Run in show()' def message(word='hello'): return word print message() show() >> Run in show() hellomessage show 함수에 중첩되어 있으면 메시지 함수도 실행됩니다.
3) 함수는 매개변수로 반환됩니다.
함수도 가능합니다. 다른 함수의 반환 값으로 사용됩니다. 믿을 수 없다면 다음 예를 보세요
>> <function lower at 0x00000000027DAD68> hello...
4) 함수가 매개변수로 전달됩니다
먼저 getName 함수를 생성한 다음 이 함수를 foo 함수에 매개변수로 전달합니다
>> I will call the getName function later leo3. 데코레이터의 실제 모습
1) 이전 단계 후에는 함수를 전달할 수 있다는 것을 이해해야 합니다. 매개변수로 반환될 수도 있고 중첩될 수도 있습니다. 장식 실제로 함수를 변경하지 않고도 함수의 기능을 늘릴 수 있습니다. 함수가 실행됩니다
a_stand_alone_function() >> I am a stand alone function,don't you dare modify me a_stand_alone_function_decorated=my_new_decorator(a_stand_alone_function) a_stand_alone_function_decorated() >> Before the function runs I am a stand alone function,don't you dare modify me After the function runs
2) 데코레이터를 사용하세요
보세요. 이렇게 간단하면 데코레이터에 구문 설탕이 있습니다 @, 그냥 @my_new_ decorator 위에 올려 놓으면 코드 덩어리가 쉽게 해결됩니다. 이것은 간단하고 효율적인 Python 코드입니다.
another_stand_alone_function=my_new_decorator(another_stand_alone_function)4. 데코레이터를 사용하는 이유
데코레이터는 코드 유지 관리 및 미적 측면에서 여러 가지 장점을 제공합니다. 그리고 구조화 도구로서 데코레이터는 자연스럽게 코드 캡슐화를 촉진하여 중복성을 줄이고 향후 유지 관리 및 확장을 더 쉽게 만듭니다.
Django와 Flask를 공부했다면 웹 프레임워크에서 코드를 캡슐화하기 위해 수많은 데코레이터가 사용된다는 것을 알게 될 것입니다. 아래의 간단한 예를 살펴보겠습니다. 테마가 있습니다. function은 문자열을 출력하는 함수와 이탤릭체로 만드는 함수가 있습니다. 데코레이터를 사용하면 이들을 매우 유연하게 결합하여 함수의 기능을 확장할 수 있습니다.
word()
>> <b><i>hello</i></b>
한 가지 주목해야 할 점은 데코레이터의 순서가 변경되면 결과는 다음과 같습니다. 똑같습니다. 아아아
이제 데코레이터를 시작했으니 이해가 안 되는 부분이 있으면 메시지를 남겨서 토론하고 소통하세요. 실제로 데코레이터, 클래스 데코레이터 등을 통해 매개변수를 전달하는 등 데코레이터의 고급 용도가 많이 있습니다. 이에 대해서는 나중에 설명하겠습니다. 요약위 내용은 Python의 데코레이터에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!