inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

잠깐지식(전역변수와 지역변수)

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

280

guide94

작성한 질문수 2

2

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

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

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

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

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

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

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

함수를 실행하는건가요?

python 코테 준비 같이 해요!

답변 1

1

김태원

안녕하세요^^

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

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

0

Data_E

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

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

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

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

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

2

서밍규

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

 

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

 

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

 

[참고]

기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.

0

76

2

스택에서 ')'을 만나는 경우

0

78

3

문제가 어디있나요?

0

64

2

변수 or 함수명

0

61

1

침몰하는 타이타닉 문제 질문입니다

0

55

1

AA.py 책점 에러

0

57

1

오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.

0

111

2

5.동전분배하기 문제 밑에코드도 정답이될까요?

0

110

1

아나그램 비교 코드

0

116

2

AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.

0

160

2

문제 링크가있나여?

0

147

2

채점기 Time Limit Exceeded 오류 문의

1

162

2

동적계획법은 사용하는 문제

0

126

2

제 코드 좀 봐주세요

0

147

1

예외가 존재할 가능성?

0

97

1

3번이 안풀립니다

0

93

0

5번 틀림

0

113

0

오류원인?

0

98

0

리스트 선언

0

106

1

침몰하는 타이타닉(그리디) 문제 질문

0

109

1

알고리즘

0

68

1

코딩테스트

0

92

1

DFS 순서 질문드립니다.

0

122

2

left, right를 사용한 풀이법에 대한 질문입니다

0

91

1