🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

파이썬은 위에서부터 작동하는게 아닌가요?

21.02.02 14:46 작성 조회수 175

2

if cnt == 5:
    cnt = cnt + 1
    print(cnt)

여기서 첫 번째 줄이 참이어야 그 다음줄이 실행될텐데

이 시점에서는 아직 cnt = cnt + 1이 실행되지 않았기 때문에

전역변수 cnt를 참조하는 것 아닌가요?

왜 오류는 cnt = cnt + 1에서 발생하지 않고

if 조건식에서 발생하는거죠?

함수가 실행될 때 지역변수가 있는지 먼저 확인한 뒤에

함수를 실행하는건가요?

답변 1

답변을 작성해보세요.

1

안녕하세요^^

함수가 호출되는 순간 스택에 함수에 대한 스택프레임(매개변수, 지역변수, 복귀주소 정보)등을 생성하고 실행되는 걸로 알고있습니다. 그래서 위에 코드 같은 경우 cnt를 if cnt==5: 단계에서 지역변수로 인식해서 실행되는데 cnt에 값이 할당되지 않은 상태에서 참조를 하여 생기는 오류로 생각하시면 좋겠습니다.

저도 이런거에 전문가는 아니라서 조심스럽긴 하지만 저는 이렇게 알고있습니다.

Data_E님의 프로필

Data_E

2021.08.29

if cnt==5: 에서 DFS2()는 cnt를 전역변수로 인식을 했고, 

cnt=cnt+1에서 DFS2()가 cnt를 지역변수로 인식하면서 모순이 생기기때문에 오류가 생기는건 아닐까요?

(cnt를 지역변수로 설정하려하니 이미 main에서 전역변수로 설정했으므로 오류...)

순차적으로 실행된다고 생각을 하면

cnt=cnt+1코드보다  if cnt==5:가 먼저 실행되기때문에 위에서 기재한 것처럼 이해가 되거든요.

5hdumatt님의 프로필

5hdumatt

2021.11.05

검색해보니 파이썬이 한 번에 한 줄씩 처리하는 행위는 모듈을 로드할 때 뿐이며,  우리가 작성한 소스코드를 받아서 실행하기 전 해석기를 통해 모든 해석을 수행한다고 합니다.

 

이후 해석된 소스코드가 컴파일 된 바이트 코드 형태로 메모리에 올라가게 되는데, 이로써 파이썬은 우리의 소스코드를 실행하기 이전에 해석하는 과정을 거친다는 것을 알 수 있습니다.

 

그러므로  cnt 변수는 로컬 변수로 이미 해석이 끝나있는 상태이기 때문에 실행 시점에서 "cnt 변수가 지역변수로 선언이 안되어있네?" 라는 판단과 함께 UnBoundLocalError가 나지 않았나 싶습니다.

 

[참고]

채널톡 아이콘