본문 바로가기

Programming/#Python

[Python] 지역 변수와 전역 변수

목표
  1. 함수에서 사용하는 지역변수, 전역변수의 차이를 이해

  2. 전역변수와 지역변수의 장단점을 이해하여 프로그램을 모듈러하게 짜는 방법에 대해 이해 

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 #마찬가지

 

정리하기
  1. 프로그램을 모듈러하게 짜기 위해 필요한 함수에서 사용하는 지역변수, 전역변수 이해
  2. 지역변수와 전역변수의 장단점을 이해

edwith, 파이썬으로 배우는 프로그래밍 기초, 김문주 교수

 

I'm a Senior Student in Data Science ! 

데이터 사이언스를 공부하고 있는 4학년 학부생의 TIL 블로그입니다. 게시글이 도움 되셨다면 구독과 좋아요 :)