python_syntax_with

nowhere·2022년 1월 25일
0

문제제시

  • 파이썬의 키워드 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에 대한 개념은 너무 당연하게 생각했었다.
  • 실습을 하면서 종종 이러한 상황에 부딪혔지만, 당연히 아닐거라 생각했던게 문제였다.

결론

  • Context Manager에 대해 공부하기
profile
수익성은 없으니 뭐라도 적어보는 벨로그

0개의 댓글