>  Q&A  >  본문

플라스크 사용자 권한 데코레이터

읽는 동안 이 코드가 약간 혼란스럽고 데코레이터가 약간 불분명하다는 것을 알았습니다. 이 코드를 분석하는 데 도움을 주셨으면 합니다. !

으아악
PHP中文网PHP中文网2711일 전625

모든 응답(2)나는 대답할 것이다

  • 迷茫

    迷茫2017-05-18 10:52:23

    먼저 데코레이터의 원리를 이해해야 합니다.

    으아악

    는 실제로 다음 명령문과 동일합니다.

    으아악

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

    와 동일합니다. 으아악

    우선순위는 동일하고 작업은 왼쪽에서 오른쪽으로 이루어지며 여기에 정의된 함수가 먼저 계산됩니다.

    과정은 다음과 같습니다

    으아악

    회신하다
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-18 10:52:23

    다음 코드가 도움이 되기를 바랍니다

    으아악

    실행 결과:

    으아악

    회신하다
    0
  • 취소회신하다