이제 abcd 함수가 있습니다. 이 함수의 핵심은 다른 함수를 매개변수로 받아들이고 함수를 반환한다는 것입니다. (반환된 함수의 용도는 귀하에게 달려 있습니다.) 이때 abcd는 수식어가 아닌 함수일 뿐입니다. 그리고 다음과 같은 요구가 매우 일반적이기 때문에: 오래된 기능이 있고 우리는 새로운 기능을 정의하고 싶습니다. 이 새로운 기능은 일반적으로 이전 기능과 기능이 유사하지만 인쇄와 같은 조금 더 새로운 기능이 있습니다. 데이트하고 사람을 판단하는 것. 그러면 새 함수를 정의하는 과정에서 이전 함수가 반드시 호출될 것입니다. 그러나 새 함수는 실제로 크게 변경되지 않으며 이전 함수는 쓸모가 없는 경우가 많습니다(보통 새 함수를 나중에 사용하기 때문입니다). 네임스페이스 변경 방지 혼란을 피하고 개발을 용이하게 하기 위해 이전 함수의 이름을 사용하여 새 함수를 나타낼 수 있습니다. 즉, 새 함수를 정의한 후 이름을 다시 이전 f로 변경하고 이전 함수로 변경합니다. f는 더 이상 없습니다. 따라서 우리는 다음과 같이 할 수 있습니다: 함수 f를 받아들이고 새 함수를 반환한 다음 반환 값(새 함수)을 f에 할당하는 abcd 함수를 정의합니다(파이썬의 함수 이름에도 값을 할당하여 다른 함수가 될 수 있음). 기능). 이것이 실제로 위의 두 번째 코드 부분이 수행하는 작업입니다. 이 요구 사항은 매우 일반적이기 때문에 Python에서는 이를 위해 특별히 구문을 정의합니다. 매번 f=abcd(f)를 원하지 않나요? 그러면 f의 def 문 앞에 @abcd를 추가하면 됩니다. 번거로울 뿐만 아니라 때로는 오해하기 쉽습니다. . 이때 abcd가 데코레이터가 됩니다. 이 등가 관계를 이해하면 함수를 더 쉽게 이해할 수 있습니다. 어딘가에 사용하면 다음과 같이 보일 것입니다
으아악
는
와 동일합니다.
으아악
우선순위는 동일하고 작업은 왼쪽에서 오른쪽으로 이루어지며 여기에 정의된 함수가 먼저 계산됩니다.
먼저 데코레이터의 원리를 이해해야 합니다.
으아악는 실제로 다음 명령문과 동일합니다.
으아악이제 abcd 함수가 있습니다. 이 함수의 핵심은 다른 함수를 매개변수로 받아들이고 함수를 반환한다는 것입니다. (반환된 함수의 용도는 귀하에게 달려 있습니다.) 이때 abcd는 수식어가 아닌 함수일 뿐입니다.
와 동일합니다. 으아악그리고 다음과 같은 요구가 매우 일반적이기 때문에: 오래된 기능이 있고 우리는 새로운 기능을 정의하고 싶습니다. 이 새로운 기능은 일반적으로 이전 기능과 기능이 유사하지만 인쇄와 같은 조금 더 새로운 기능이 있습니다. 데이트하고 사람을 판단하는 것. 그러면 새 함수를 정의하는 과정에서 이전 함수가 반드시 호출될 것입니다. 그러나 새 함수는 실제로 크게 변경되지 않으며 이전 함수는 쓸모가 없는 경우가 많습니다(보통 새 함수를 나중에 사용하기 때문입니다). 네임스페이스 변경 방지 혼란을 피하고 개발을 용이하게 하기 위해 이전 함수의 이름을 사용하여 새 함수를 나타낼 수 있습니다. 즉, 새 함수를 정의한 후 이름을 다시 이전 f로 변경하고 이전 함수로 변경합니다. f는 더 이상 없습니다. 따라서 우리는 다음과 같이 할 수 있습니다: 함수 f를 받아들이고 새 함수를 반환한 다음 반환 값(새 함수)을 f에 할당하는 abcd 함수를 정의합니다(파이썬의 함수 이름에도 값을 할당하여 다른 함수가 될 수 있음). 기능). 이것이 실제로 위의 두 번째 코드 부분이 수행하는 작업입니다. 이 요구 사항은 매우 일반적이기 때문에 Python에서는 이를 위해 특별히 구문을 정의합니다. 매번 f=abcd(f)를 원하지 않나요? 그러면 f의 def 문 앞에 @abcd를 추가하면 됩니다. 번거로울 뿐만 아니라 때로는 오해하기 쉽습니다. . 이때 abcd가 데코레이터가 됩니다. 이 등가 관계를 이해하면 함수를 더 쉽게 이해할 수 있습니다. 어딘가에 사용하면 다음과 같이 보일 것입니다 으아악
는
우선순위는 동일하고 작업은 왼쪽에서 오른쪽으로 이루어지며 여기에 정의된 함수가 먼저 계산됩니다.
과정은 다음과 같습니다으아악
다음 코드가 도움이 되기를 바랍니다
으아악실행 결과:
으아악