문제제시
- 파이썬의 키워드 with를 쓰다가 scope와 관련해서 내가 알고있던 지식과 다른 부분을 발견했다.
with open('file_name',encoding='euc-kr') as f:
cols = f.readline()
contents = f.readlines()
print(cols,contents)
- 이전까지 java나 js와 같은 OOP에서는 if, while, for 같은 키워드를 사용할 때 이 연산을 위한 별도의 scope를 작성해줬었다.
- 그리고 이 별도의 작업 영역은 지역변수를 공유하지 않을 것이라고 생각했다.
문제해결
source : stackoverflow

결과
- 먼저, if, for, while, with는 scope를 만들지 않는다.
- 두 번째, scope를 만들지 않기 때문에 모두 같은 scope에 속해있다.
- 세 번째, 따라서, 내부에서 지역 변수를 선언해도 그대로 유지된다.
- 네 번째, 단, 다른 언어에서도 언급하듯, 이러한 영역 안에서 변수 선언은 하지 않는 것이 좋다.
원인 분석
- indent로 영역을 구분하는 python이지만 scope에 대한 개념은 너무 당연하게 생각했었다.
- 실습을 하면서 종종 이러한 상황에 부딪혔지만, 당연히 아닐거라 생각했던게 문제였다.
결론