파이썬/파이썬(python) 초급

[12-1 파이썬] 지역 변수, 전역 변수, scope, 지역 함수

Olivia-BlackCherry 2022. 8. 20. 20:07

오늘은 유효범위에 대해 알아보자. 

영어로는 scope이라고 부른다. 

영영사전에서 scope의 의미를 살펴보자.  

- the extent of the area or subject matter that something deals with or to which it is relevant.

> 지역이나 주제에 대한 규모나 범위를 뜻함.

 

파이썬에서 scope는 어떤 의미일까?

파이썬에서 scope은

두 가지가 있다.

전역 범위,

지역 범위

 

우리집 마당에 연못이 있다. 

이 연못에 있는 물고기를 잡을 수 있는 사람은 우리집 가족들 뿐이다.

파이썬의 scope 유효 범위에 비춰 생각해보면, 

우리집 연못은 <지역 범위, local scope>에 해당한다.

 

그리고 우리 마을에도 연못이 있다.

이 연못에 있는 물고기를 잡을 수 있는 사람은 우리집 가족 뿐만 아니라, 이웃인 토니네집, 제니네집도 될 수 있다.

파이썬의 scope 유효 범위에서

마을의 연못은 <전역 범위, global scope>에 해당한다. 

 

코드를 보자.

해당 코드에서 my_pond()라는 함수가 있다.

이 함수 안에 fish 변수를 만들었다. 

이 변수는 함수 안에서만 쓸 수 있다.

이 함수 안에 있는 fish 변수는 <지역 범위, local scope>에 속한다.

fish 변수를 지역 변수 local variable 이라고 부른다.

 

반면 my_pond()함수 위(바깥)에

fish 변수가 만들어졌다.  

이 변수는 함수 안에서도, 밖에서도 쓸 수 있다. 

함수 밖에 있는 fish 변수는 <전역 범위, global scope>에 속한다.

fish 변수는 전역 변수 global variable이라고 부른다.

 

 

결국 지역범위와 전역범위의 차이점은?

1. 정의한 장소, 만든 장소
2. 사용 범위

이번에는 우리집 바깥, 즉 우리 마을(전역범위=global scope)에 연못 말고, 나무 한그루(전역변수=global variable)를 더 만들었다.

tree는 my_pond() 함수 밖에서 정의되었기 때문에 전역 범위에 속하는 것이다. 

<<<<----- 1번: 정의한 장소, 만든 장소

전역 범위는 함수 내부, 외부 어디서든 사용할 수 있다. 

<<<< -----2번: 사용범위

 

 

전역 함수

이제까지는 전역 범위, 지역 범위에 관해 이야기했는데,

전역 Global, 지역 Local 범위 Scope의 개념은 

변수에만 한정하여 적용되지는 않는다.

 

지금부터는 함수에 대해 이야기해보자.

함수 역시 scope 범위를 가질 수 있다. 

 

아래의 my_house() 안에는

my_ponds()와 my_ tree()함수가  

2단계로 중첩되어 만들어졌다.

my_ponds()와 my_ tree()함수는

my_house 안에서만 사용이 가능한 지역 함수라고 말한다.

 

만약 함수 외부에서 my_ponds를 호출하면 NameError가 뜬다. 

name 'my_ponds' is not defined

 

 

따라서,

함수나 변수 등 원하는 모든 대상에 이름을 지정할 때마다 

그것을 만든 곳을 잘 알고 있어야 한다!!

 

 

 

if절, while문, for문은 지역 범위를 만들지 않는다.

참고로, if절이나 while문, for문을 작성할 때

다음 줄을 들여쓰기해서 작성하는데,

이때 새로운 변수를 선언한다고 하더라도,

여기서는 지역 범위를 만드는 것으로 간주하지 않는다.