v* 지역변수
어떠한 함수 안의 선언된 변수는 그 함수지역 안에서만 사용할 수 있고, 함수가 종료되면 모두 삭제된다.
* 전역변수
프로그램의 어디서든지 변수를 사용할 수 있다.
<예제1-1> (ERROR)
def prt_str():
print("당신의 나이는 %d살 이고, 이름은 %s입니다.." %(age,name))
def prt_str2():
name = input("이름 입력 : ")
age = int(input("나이 입력 : "))
prt_str2()
prt_str()
출력 결과 : NameError: name 'age' is not defined
위 코드는 에러가 발생한다.
함수안에서 선언된 name과 age 변수는 함수 내의 지역변수로 선언되기 때문에 함수가 끝나면 해당 변수도 할당이 해제된다.
에러를 해결해보자.
함수 안에서 입력받은 변수를 함수가 끝난 후에도 사용하고 싶다면 'global'을 이용해서 전역변수로 선언해준다.
=> prt_str2 함수가 종료되더라도 name과 age 변수가 사라지지 않는다.
<예제1-2>
def prt_str():
print("당신의 나이는 %d살 이고, 이름은 %s입니다.." %(age,name))
def prt_str2():
global name, age
name = input("이름 입력 : ")
age = int(input("나이 입력 : "))
prt_str2()
prt_str()
입력1 : 홍길동
입력2 : 32
출력 결과 : 당신의 나이는 32살 이고, 이름은 홍길동입니다..
<예제2>
def prt(b) :
global a
a = 20
b = 50
print("prt함수에서 출력 : %d"% b)
print("prt함수에서 출력 : %d"% a)
b = 10
prt(b)
print("main에서 출력 : %d" % b)
print("main에서 출력 : %d" % a)
<출력 결과>
prt함수에서 출력 : 50
prt함수에서 출력 : 20
main에서 출력 : 10
main에서 출력 : 20
10의 값을 가지는 b가 prt 함수로 복사되어 prt함수 안에서 50으로 값이 바뀌지만, prt함수 밖의 변수 b에는 지장을 주지 않는다.
반면에, global로 선언된 a는 전역변수를 가지고 있기 때문에 함수가 끝나도 사리지 않는다.
* 우선순위
지역변수 > 전역변수