전역범위
변수 범위 규칙
변수 범위 규칙
2020.11.27b = 6 def f1(a): print(a) print(b) b = 9 f1(3) 이 문법은 발생시키는데 전역 변수 b가 있고 print(b) 다음에 지역 변수 b에 할당하는 문이 나오므로 전역 변수의 값이 6이 출력될 것이라고 생각 했지만 아니다. 사실은 파이썬이 함수 본체를 컴파일 할때 b가 함수 안에서 할당되므로 b를 지역 변수로 판단한다. 생성된 바이트코드를 보면 이 판단에 의해 지역 환경에서 b를 가져오려 한다는 것을 알수 있다. 나중에 f1(3)을 호출할 때 지역변수 a의 값을 출력하지만 지역 변수 b의 값을 가져오려 할때 b가 바인딩 되어 있지 않다는 것을 발견한다. 이 현상은 버그가 아니고 설계 결정사항이다. 파이썬은 변수가 선언되어 있기를 요구하지 않지만, 함수 본체 안에서 할당된 변수..