파이썬 강좌(초급)/6.함수

6.함수 - 4)지역(로컬)변수 & 전역(글로벌)변수

파기차차 2024. 3. 10. 10:39
728x90
반응형
SMALL

1) 지역변수가 뭐에요?

함수내에서만 사용이 가능한 변수를 말하며, 함수호출이 끝나면 사용할 수 없습니다.

 

 

아래 코드를 실행하면 어떻게 될까요?

gun = 10

def checkpoint(soldiers):
    # gun = 9
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))
checkpoint(2)
print("남은 총 : {0}".format(gun))

위의 코드를 실행하면 에러가 발생합니다. 그 이유는 함수내의 지역변수 gun이 정의 되지 않았음에도 gun을 사용하려 하기 때문입니다.

따라서 위의 코드에서 주석처리된 ' # gun = 9'를 풀고 실행하면 정상적으로 실행이 되는데, 이는 지역변수가 이제 정의 되었기 때문입니다.

 

 

 

 

2) 전역변수가 뭐에요?

함수내에서 뿐만아니라 함수 밖에서도 사용이 가능한 변수로 프로그램내에서 어디서든 사용 가능합니다.


 

위의 코드에서 지역변수를 선언하지 않고, 할 수 있는 다른 방법은 아래와 같이 함수내에서 global 키워드를 사용하는 것입니다.

이렇게 사용하면 전역변수(gun = 10)에 접근이 허용되어 에러가 발생하지 않습니다.

 

다만, global 키워드를 너무 많이 사용하는 경우 프로그램이 커졌을때 코드를 이해하기 어렵게 되고, 코드의 실수가 늘어날 가능성이 크기 때문에 너무 많이 사용하는 것은 좋은 방법이 아닙니다.

gun = 10

def checkpoint(soldiers):
    global gun # global 키워드를 사용하여 전역변수에 접근 가능
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))
checkpoint(2)
print("남은 총 : {0}".format(gun))

 

 

가장 좋은 코딩 방법은 아래와 같이 함수의 리턴값을 사용하여 값을 전달하는 방식입니다.

 

아래 코드의 경우 함수 내 지역변수가 선언되어 있지 않지만, 호출 시 전역변수를 전달하여 함수내에서 값을 처리하게 하였고, 처리 결과를 리턴하여 함수 밖의 gun 변수에 할당하였습니다.

 

이러한 코딩 방식이 소스를 명확하게 하여 실수를 줄이는 좋은 코딩 방식이 되겠습니다.

gun = 10

def checkpoint_ret(gun, soldiers):
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))
    return gun

print("전체 총 : {0}".format(gun))
# checkpoint(2)
gun = checkpoint_ret(gun, 2)
print("남은 총 : {0}".format(gun))

 

 

3) 실습

 

 

(1) 아래 코드를 실행하면 에러가 발생합니다. 왜 그럴까요?

 

def func(a,b):
    print(a + b)


func("안녕", 3)

 

 

 

모범답안

에러가 발생합니다. 왜냐하면 함수 호출 시 인자로 문자열("안녕") 과 숫자(3)를 던졌는데, 함수 내에서 이 둘을 더하는 과정에서 타입이 달라 에러가 발생합니다.

따라서 아래와 같이 타입을 일치 시켜주는 코드 수정(str(b))이 필요합니다.

def func(a,b):
    print(a + str(b))


func("안녕", 3)

 

 

 

 

 

(2) 2개의 숫자를 입력 받아 두 수의 합을 출력하는 print_sum()함수를 정의하고 호출해 보세요.

 

 

 

 

모범답안

def print_sum(a,b):
    print(a+b)


print_sum(1,2)

 

 

 

 

(3) 아래 코드를 실행하면 어떻게 될지 상상해 보세요.

 

def plus(n):
    result = n + 1
    
plus(3)
print(result)

 

 

 

 

 

 

모범답안

에러가 발생합니다. 이는 함수 밖에서 정의되지 않은 result변수를 사용하려 했기 때문입니다.

따라서 옳바른 코드는 아래와 같습니다.

즉, 함수 내에서 처리된 결과를 리턴하여 함수 밖에서 사용할 수 있도록 해야 합니다.

def plus(n):
    result = n + 1
    
    return result
    
result = plus(3)
print(result)

 

 

 

 

(4) 문자열을 입력 받아 인터넷 주소를 반환하는 make_url()함수를 정의해 보세요.

 

호출 시 : make_url("naver")

출력결과 : www.naver.com

 

 

 

 

 

 

모범답안

def make_url(string):
    url = "www." + string + ".com"
    
    return url

url = make_url(naver)
print(url)
728x90
반응형
LIST