>  기사  >  백엔드 개발  >  Python의 데코레이터에 대한 자세한 설명

Python의 데코레이터에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-02 15:11:541375검색

몇 년 전 처음 Python을 배웠을 때, 데코레이터를 볼 때, 지우인 매뉴얼에 나오는 이상한 단어를 이해할 수 없다고 느꼈던 기억이 납니다. 사실 데코레이터는 이해하기 매우 어려운 개념이라고 생각합니다. 많은 초보자들이 이런 혼란을 겪어야 하기 때문에 이 글에서는 Python의 데코레이터에 관한 관련 정보를 주로 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

이 글을 읽고 나면 데코레이터가 무엇인지 자세히 알아볼 수 있습니다.

1. 데코레이터

인터넷에서 데코레이터에 대해 어떤 분들이 이렇게 댓글을 주셨는데, 글도 참 흥미롭고 비유도 생생한 것 같아요

  • 누구나 가지고 있는 속옷은 부끄러움을 가리기 위해 주로 사용하지만, 겨울에는 바람과 추위로부터 우리를 지켜줄 수 없습니다. 어떻게 해야 할까요?

  • 우리가 생각한 방법 중 하나는 속옷을 더 두껍고 길게 변형하는 것이었습니다. 이렇게 하면 수치를 가려주는 기능뿐만 아니라 따뜻함도 제공합니다. 문제는 이 속옷을 바지로 변형한 후에도 여전히 수치심을 가리는 기능은 있지만 본질적으로 더 이상 진짜 속옷이 아니라는 것입니다. 그래서 똑똑한 사람들이 바지를 발명하고

  • 속옷에 영향을 주지 않고 바지를 속옷 바깥쪽에 직접 올려놓으면 속옷이 여전히 차갑습니다
  • 데코레이터는 속옷의 기능에 영향을 주지 않으면서 우리 몸에 따뜻함을 선사하는 바지와 같습니다.

2. 데코레이터

왜 입문 장 마지막에 데코레이터에 대해 이야기해야 할까요? 너무 어렵고 내용도 많기 때문에 전제 조건을 이해해야 합니다. 모두가 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 &#39;Run in show()&#39;
 def message(word=&#39;hello&#39;):
 return word
 print message()
 
show()
>>
Run in show()
hello
message show 함수에 중첩되어 있으면 메시지 함수도 실행됩니다.

3) 함수는 매개변수로 반환됩니다.

함수도 가능합니다. 다른 함수의 반환 값으로 사용됩니다. 믿을 수 없다면 다음 예를 보세요

Python의 데코레이터에 대한 자세한 설명

>>
<function lower at 0x00000000027DAD68>
hello...


4) 함수가 매개변수로 전달됩니다

먼저 getName 함수를 생성한 다음 이 함수를 foo 함수에 매개변수로 전달합니다

>>
I will call the getName function later
leo

Python의 데코레이터에 대한 자세한 설명

3. 데코레이터의 실제 모습

1) 이전 단계 후에는 함수를 전달할 수 있다는 것을 이해해야 합니다. 매개변수로 반환될 수도 있고 중첩될 수도 있습니다. 장식 실제로 함수를 변경하지 않고도 함수의 기능을 늘릴 수 있습니다. 함수가 실행됩니다


a_stand_alone_function()
>>
I am a stand alone function,don&#39;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&#39;t you dare modify me
After the function runs

Python의 데코레이터에 대한 자세한 설명2) 데코레이터를 사용하세요

Python의 데코레이터에 대한 자세한 설명보세요. 이렇게 간단하면 데코레이터에 구문 설탕이 있습니다 @, 그냥 @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의 데코레이터에 대한 자세한 설명아아아

이제 데코레이터를 시작했으니 이해가 안 되는 부분이 있으면 메시지를 남겨서 토론하고 소통하세요. 실제로 데코레이터, 클래스 데코레이터 등을 통해 매개변수를 전달하는 등 데코레이터의 고급 용도가 많이 있습니다. 이에 대해서는 나중에 설명하겠습니다.

요약

위 내용은 Python의 데코레이터에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.