:어떠한 객체(변수,함수)가 유효한 범위를 말한다.
범위를 벗어나면 해당 객체를 사용될 수 없다.
파이썬에서 scope는 항상 객체가 선언된 지점에서 위로는 상위 객체까지, 아래로는 모든 하위 객체들과 그 안에까지 범위이다.
Local Scope이 가장 범위가 제한적이고 built-in scope이 가장 범위가 광범위하다.
Local Scope
-local scope를 가지고 있는 변수나 함수 혹은 객체는 이름 그대로 특정 범위에서만 유효하다.
-주로 함수 안에서 선언된 변수나 함수가 로컬 스코프를 갖고있다.
Enclosed Scope
-중첩함수가 있을때 적용되는 scope이다.
-부모함수에서 선언된 변수는 중첩함수 안에서도 유효한 범위를 가지고 있다.
Global Scope
-함수 안에서 선언된 것이 아닌 함수 밖에서 선언된 변수나 함수를 말한다.
-글로벌 스코프를 가지고 있는 변수와 함수들은 선언된 지점이 해당 파일에서 가장 바깥쪽에서 선언되므로 해당 파일에서 선언된 지점 아래로는 다 유효한 범위를 갖는다. 그래서 글로봘~~
Built-in Scope
-가장 광범위한 scope
-파이썬에 내장되어있는, 파이썬이 제공하는 함수 또는 속성들이 built-in-scope를 가지고 있다.
-따로 선언이 없어도 모든 파이썬 파일에서 유효한 범위를 갖는다.
-예를 들어, list등과 같은 자료구조의 element 총 개수를 리턴하는 len함수가 built-in-scope를 가지고 있다.
파이썬은 변수나 함수의 정의를 찾을 때의 순서
Local => Enclosing => Global => Built-in
만일 동일한 이름의 변수들이 서로 다른 scope에서 선언이 되면 더 좁은 범위에 있는 변수(혹은 함수)가 더 넓은 범위에 있는 변수를 가리는 (shadowing)효과가 나타난다.
문제
왼쪽 상단에 코드를 수정하셔서 scope_test 함수에 parameter 값에 상관 없이 무조건 63이 리턴되도록 수정해주세요.
예를 들어 다음과 같이 되어야 합니다.scope_test(10) == 63 scope_test(20) == 63 scope_test(333) == 63
나의 답:
what_is_my_scope = 7 def scope_test(what_is_my_scope): some_number = 9 what_is_my_scope =7 def inner_scope_test(what_is_my_scope): return some_number * what_is_my_scope return inner_scope_test(what_is_my_scope)