전편에 이어서 함수에 관련한 이야기.
함수 안에서 변수를 선언하면 어떻게 될까?
밖이나 안이나 차이가 없다고 생각하면 안된다.
def age():
my_age = 23
print(my_age)
age()
# 23
내 나이를 출력하는 함수를 만들었다.
근데 굳이 함수 안에서 출력해야할까?
def age():
my_age = 23
print(my_age)
# NameError: name 'my_age' is not defined
함수 내부에 my_age를 직접 출력하려 했으나. . .
my_age라는 변수는 없단다.
왜냐하면 함수 내부에서 선언된 지역변수는 함수가 종료됨과 동시에 사라지기 때문.
지역변수의 휘발성 때문에 다음과 같은 특징을 갖는다.
특징 | 전역변수 | 지역변수 |
함수 내부에서 읽기 | O | O |
함수 내부에서 수정 | X(g) | O |
함수 외부에서 읽기 | O | X(g) |
함수 외부에서 수정 | O | X |
그럼 이 규칙은 절대적이냐? 그건 아니다.
global 문을 사용하면 외부에서 지역변수의 사용, 내부에서의 전역변수 수정 등이 가능하다.(g로 표시된 부분)
# Case 1
def age():
global my_age = 23 # 함수 내부에서 global my_age 선언
print(my_age)
# 23
# Case 2
my_age = 3
def age():
global my_age = 23 # 전역변수를 수정
print(my_age)
이처럼 강력하지만 사용하지 않는 게 좋다.
global을 쓰지 않고도 대부분의 문제는 해결이 가능하며
쓰는 순간 가독성이 현저히 떨어진다.
'파이썬 > 1. 파이썬 기초' 카테고리의 다른 글
파이썬 파일 입출력(File I/O) (0) | 2020.04.13 |
---|---|
파이썬 스택 프레임(stack frame) (0) | 2020.04.13 |
파이썬 함수(function) (0) | 2020.04.13 |
파이썬 조건문(if else), 반복문(while, for) (0) | 2020.04.13 |
파이썬의 기본 자료구조(List, Tuple, Dict) (0) | 2020.04.13 |