-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
파이썬은 위에서부터 작동하는게 아닌가요?
21.02.02 14:46 작성 조회수 175
2
if cnt == 5:
cnt = cnt + 1
print(cnt)
여기서 첫 번째 줄이 참이어야 그 다음줄이 실행될텐데
이 시점에서는 아직 cnt = cnt + 1이 실행되지 않았기 때문에
전역변수 cnt를 참조하는 것 아닌가요?
왜 오류는 cnt = cnt + 1에서 발생하지 않고
if 조건식에서 발생하는거죠?
함수가 실행될 때 지역변수가 있는지 먼저 확인한 뒤에
함수를 실행하는건가요?
답변을 작성해보세요.
1
김태원
지식공유자2021.02.02
안녕하세요^^
함수가 호출되는 순간 스택에 함수에 대한 스택프레임(매개변수, 지역변수, 복귀주소 정보)등을 생성하고 실행되는 걸로 알고있습니다. 그래서 위에 코드 같은 경우 cnt를 if cnt==5: 단계에서 지역변수로 인식해서 실행되는데 cnt에 값이 할당되지 않은 상태에서 참조를 하여 생기는 오류로 생각하시면 좋겠습니다.
저도 이런거에 전문가는 아니라서 조심스럽긴 하지만 저는 이렇게 알고있습니다.
![Data_E님의 프로필](https://cdn.inflearn.com/public/main/profile/default_profile.png?w=48)
Data_E
2021.08.29
if cnt==5: 에서 DFS2()는 cnt를 전역변수로 인식을 했고,
cnt=cnt+1에서 DFS2()가 cnt를 지역변수로 인식하면서 모순이 생기기때문에 오류가 생기는건 아닐까요?
(cnt를 지역변수로 설정하려하니 이미 main에서 전역변수로 설정했으므로 오류...)
순차적으로 실행된다고 생각을 하면
cnt=cnt+1코드보다 if cnt==5:가 먼저 실행되기때문에 위에서 기재한 것처럼 이해가 되거든요.
![5hdumatt님의 프로필](https://cdn.inflearn.com/public/main/profile/default_profile.png?w=48)
5hdumatt
2021.11.05
검색해보니 파이썬이 한 번에 한 줄씩 처리하는 행위는 모듈을 로드할 때 뿐이며, 우리가 작성한 소스코드를 받아서 실행하기 전 해석기를 통해 모든 해석을 수행한다고 합니다.
이후 해석된 소스코드가 컴파일 된 바이트 코드 형태로 메모리에 올라가게 되는데, 이로써 파이썬은 우리의 소스코드를 실행하기 이전에 해석하는 과정을 거친다는 것을 알 수 있습니다.
그러므로 cnt 변수는 로컬 변수로 이미 해석이 끝나있는 상태이기 때문에 실행 시점에서 "cnt 변수가 지역변수로 선언이 안되어있네?" 라는 판단과 함께 UnBoundLocalError가 나지 않았나 싶습니다.
답변 1