[Python] 변수의 사용범위 알아보기
- Language/Python
- 2020. 10. 15.
함수를 포함한 스크립트 전체에 접근할 수 있는 변수를 전역 변수,
변수를 만든 함수안에서만 접근 할 수 있는 것을 지역변수라고 한다.
그래서 지역변수에서 생성된 변수는 함수 밖에서 사용 할 수 없는 것이 일반적인 사실이다.
그러나 만약 같은 이름이 있다면... 우선순위는 자기 함수 내에 있는 변수 즉, 지역변수가 우선순위이다.
이 우선 순위를 변경해보자.
함수 안에서 전역 변수 사용하기
global 전역변수
x = 10
def foo():
global x
x = 20
print(x)
foo()
print(x)
>>>20
>>>20
global을 사용할 경우 x의 변수를 지역변수에서 따로 생성하지 않는다.
기존 전역변수 x를 가져와서 전역변수 x의 값을 변경하는 모습을 볼 수 있다.
함수 안에서 함수 만들기
def print_hello():
hello = 'Hello, world!'
def print_message():
print(hello)
print_message()
print_hello()
>>>Hello, world!
함수 안에 함수를 만들었다. 위에서 설명한 전역변수 안에 지역변수 만들고, 다시 함수를 만들어
가져올 수 있는 것을 볼 수 있다.
그러나 지역변수 특징은 안쪽에 있는 함수는 바깥쪽에 있는 함수에 접근 하기가 어렵다는 점이다.
지역 변수 변경하기
nonlocal 지역변수
def A():
x = 10
def B():
nonlocal x
x = 20
B()
print(x)
A()
>>>20
nonlocal을 x의 변수에 선언하자 전역변수에 있는 x의 값이 변경 된 것을 확인 할 수가 있다.
global과 비슷하면서도 다르므로 이 점을 알아야 한다.
NONLOCAL이 변수를 찾는 순서.
def A():
x = 10
y = 100
def B():
x = 20
def C():
nonlocal x
nonlocal y
x = x + 30
y = y + 300
print(x)
print(y)
C()
B()
A()
>>>50
>>>400
nonlocal은 현재 함수의 바깥쪽에 있는 지역변수를 찾을 때 가장 가까운 함수부터 찾는다.
그래서 C() 함수 안의 x는 B함수에 있는 x를 찾게 되었고 y는 A 함수 안에 y를 찾게 되었다.
그래서 결과값은 30 + 20, 300 + 100의 모습이 된 것을 살펴 볼 수가 있다.
'Language > Python' 카테고리의 다른 글
[Python] 클래스 속성과 정적, 클래스 메소드 사용하기 (0) | 2020.10.16 |
---|---|
[Python] 클래스 사용하기 (0) | 2020.10.16 |
[Python] 람다 표현식 사용하기 (0) | 2020.10.15 |
[Python] 함수에서 위치 인수와 키워드 인수 사용하기 (0) | 2020.10.15 |
[Python] 파일사용하기 (0) | 2020.10.14 |