목표
-
함수에서 사용하는 지역변수, 전역변수의 차이를 이해
-
전역변수와 지역변수의 장단점을 이해하여 프로그램을 모듈러하게 짜는 방법에 대해 이해
In [1]: def quadratic(a, b, c, x):
...: quad_term = a * x ** 2
...: lin_term = b * x
...: return quad_term + lin_term + c
# quad_term과 lin_term은 quadratic 함수 안에서만 사용할 수 있음 #지역변수
☞ quadratic 함수 안에서 사용하는 지역변수 a, b, c, x, quad_term, lin_term의 값은 qaudratic함수를 부를 때 넘겨주는 인자에 의해 결정됨
☞ 지역 변수는 함수 안에서만 사용할 수 있는 변수
모듈화된 프로그램
: 소프트웨어를 여러 부분으로 나눠서 다른 부분에 영향을 주지 않도록 프로그램을 짜는 것
☞ 각각의 모듈, 함수 내부에서의 동작은 다른 함수에 영향을 주지 않게 함으로써 프로그램이 크더라도 각각의 모듈은 독립적으로 동작함
☞ 각 함수 내부는 신경쓰지 않고 함수 간의 상호작용만 신경써도 되므로 더 효율적
☞ Hubo 함수와 같이 각 프로그램의 동작원리에 대해 사용자가 알지 못해도 잘 활용할 수 있게 해줌
전역변수
: 함수 밖에서 정의된 변수들
hubo = Robot() #여기서 hubo는 전역함수
def turn_right():
for i in range(3):
hubo.turn_left() #함수 내부에서 사용할 수 있음
전역변수에서 주의할 점
: 어느 함수에서나 사용할 수 있기 때문에 실수하기 쉬움
▶ 서로 같은 이름을 가진 지역변수가 두 다른 함수에 있어도 아무런 문제가 없음
▶ 전역변수는 모든 함수에서 읽고 쓸 수 있음
- 한 군데 잘못되어서 생긴 오류가 프로그램 전체에 영향을 미침
- 따라서 전역변수는 지양하고 되도록 지역변수를 사용하는 것이 좋음
지역 변수와 전역변수의 차이점
▒ 전역변수: 함수 안에서 값이 읽어지기만 하는 함수
def f1():
return 3 * a + 5 #읽어지기만 하고 변경되지 않음
☞ a는 다른 곳에서 쓰여지고 정의되었을 것
▒ 지역변수
: 함수 안에서 값을 한 번이라도 쓰는 변수는 모두 지역변수로 가정함
def f2(x):
a = 3 * x + 17 #x는 매개변수이자 지역변수
return a * 3 + 5 * a
▒ 오류
a = 17
def test():
print(a) #전역변수
a = 13
print(a) #지역변수
test() #오류발생
UnboundLocalError: local variable 'a' referenced before assignment
전역변수의 값 쓰기
hubo = Robot()
hubo_direction = 0 #전역변수로 정의
def turn_left():
hubo.turn_left()
global hubo_direction #이 선언이 없으면 오류
hubo_direction += 90
def turn_right():
for i in range(3):
hubo.turn_left()
global hubo_direction #마찬가지
hubo_direction =-90
예제
In [9]: a = "Letter a" #전역변수
In [10]: def f(a): #매개변수이자 지역변수
...: print("A = ", a)
In [11]: def g():
...: a = 7 #지역변수
...: f(a + 1)
...: print("A = ", a)
#위의 세 a가 서로 다른 변수라는 것을 확인하기
In [12]: print("A = ", a)
A = Letter a #전역변수 출력 (지역변수는 함수에서만 사용 가능)
In [13]: f(3.14)
A = 3.14
print("A = ", a) #전역변수는 바뀌지 않음
A = Letter a
In [14]: g()
A = 8 #f(a + 1)에 해당
A = 7 #print("A = ", a)에 해당
In [15]: print("A = ", a) #전역변수 확인
A = Letter a #마찬가지
정리하기
- 프로그램을 모듈러하게 짜기 위해 필요한 함수에서 사용하는 지역변수, 전역변수 이해
- 지역변수와 전역변수의 장단점을 이해
edwith, 파이썬으로 배우는 프로그래밍 기초, 김문주 교수
I'm a Senior Student in Data Science !
데이터 사이언스를 공부하고 있는 4학년 학부생의 TIL 블로그입니다. 게시글이 도움 되셨다면 구독과 좋아요 :)
'Programming > #Python' 카테고리의 다른 글
[Python] 파이썬 기초 (실습 결과 추가) (0) | 2021.01.06 |
---|---|
[Python] 모듈과 그래픽 객체 (0) | 2019.11.08 |
[Python] 함수 인자와 매개 변수 (0) | 2019.11.08 |
[Python] 함수를 사용한 로봇 조종 및 디지털 사진 변환 프로그램 (0) | 2019.11.06 |
[Python] 매개 변수와 반환값을 가진 함수 (0) | 2019.10.14 |