>  Q&A  >  본문

python2.7 - Python 함수 또는 클래스 코드의 실행 순서

질문이 수정되었습니다. 먼저 예시 3을 살펴보겠습니다.

간단한 제어문의 경우

으아악

우리 모두는 x > 0일 때 else 문이 실행되지 않는다는 것을 알고 있습니다.

Python은 해석된 언어입니다. 함수의 경우 예 1

으아악

다음은 제가 이해한 내용입니다. 정확한지 아닌지는 모르겠습니다.

1. Java의 경우 test1() 코드 행이 test1 함수 호출을 실행하지 않으면 기본적으로 전체 프로그램이 의미가 없으며 메모리 할당도 실행되지 않습니다. Python의 경우 test1 함수 개체가 생성된 다음 test1의 일련의 작업이 저장됩니다. 이러한 작업은 전체 프로그램이 test1을 호출하지 않더라도 test1은 항상 존재합니다. 프로그램이 메모리에서 끝나지 않기 때문입니다.

이유로 프로그램이 실행된 후 test1 함수는 현재 모듈 객체의 속성, 즉
이 됩니다.
3. 함수 이름 'test1'은 이 함수 객체를 참조하므로 함수가 호출되지 않더라도 가비지 수집 메커니즘은 이를 재활용하지 않습니다module __main__
중첩 함수 예시 2

으아악

예 1의 경우 제가 이해한 것이 잘못된 걸까요?

비교예 2에서 test1의 내부 함수 test2의 상황은 호출이 있는 경우와 없는 경우에 어떤 차이가 있나요?

이전 문제는 명확하게 설명되지 않을 수 있습니다. 여기에 또 다른 예가 있습니다 3

으아악

위 출력은 2인데, 다른 출력은 왜 1인가요?

으아악

이제 문제는 test3의 내부 함수 test4가 메모리에 있는지 여부입니다. 그렇다면 어디에서? (메모리에 있어야 할 것 같습니다.) 그렇지 않다면 왜 test4가 없나요? test4가 없는데 위 코드를 수정하면 어떻게 해야 하나요?

으아악

질문을 방금 수정했을 때 갑자기 프로그래밍에 실질적인 의미가 없을 수도 있다는 생각이 들었습니다. 내부 함수를 정의하고 사용하는 방법은 누구나 알고 있을 것입니다. 하지만 그래도 누군가가 내 질문에 답해줬으면 좋겠어요

習慣沉默習慣沉默2686일 전756

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

  • PHP中文网

    PHP中文网2017-06-12 09:27:49

    앞으로 이 질문을 두 가지 질문으로 나누는 것이 좋습니다.
    (1) 이 함수는 호출되지 않습니다. Python에는 또 다른 메모리 관리 전략인 참조 계산이 있습니다. "원리: 객체가 다른 객체에 의해 참조되는 횟수를 기록합니다. 이 객체에 대한 참조가 제거되면 참조 횟수도 계산됩니다. 0으로 감소하면 개체가 해제됩니다." 그래서 내 생각에는 참조 계산 중에 재활용되어야 했던 것 같습니다.

    (2) 호출 여부는 객체에 대한 참조가 제거되었는지 여부와 참조 주기가 있는지 여부에 따라 다릅니다. 여기 이메일 토론 스레드에 비슷한 토론이 있으므로 귀하의 질문에 대한 답변이 될지 모르겠습니다.

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