본문 바로가기
Spec UP - Backend/혼자 공부하는 파이썬

chapter_05-1. 함수 만들기

by TIS_Ha 2023. 10. 27.
반응형

함수의 기본

  • 함수를 사용하는 것 : "함수를 호출한다"
  • 함수를 호출할 때 괄호내부에 넣는 자료 : "매개변수"
  • 함수를 호출해서 최종적으로 나오는 결과 : "리턴 값"

함수는 '코드의 집합'을 의미하며 함수를 생성하는 기본 형태는 아래와 같다.

def 함수이름():
	문장

함수에 매개변수 만들기

함수를 작성할 때 괄호안에 입력하는 것을 모두 매개변수라고 부른다.

매개변수는 다음과 같이 함수를 생성할 때 괄호내부에 식별자를 입력해서 만든다.

def 함수이름(매개변수, 매개변수, ... ):
	문장

매개변수를 이용해 원하는 문장을 n번 출력하는 함수를 생성해보자.

def print_n_times(value,n):
    for i in range(n):
        print(value)

print_n_times("안녕하세요", 5) # 안녕하세요 x 5번 출력

함수의 괄호내부에 value와 n이라는 식별자를 입력하였다. (매개변수 : value, n)

이렇게 매개변수를 만들면 함수를 호출할 때 값을 입력해서 함수 쪽으로 전달할 수 있다.

예제코드에서는 print_n_time("안녕하세요",5) 형태로 함수를 호출하였으므로 각각 매개변수의 값이 value : "안녕하세요", n : 5 가 전달되어 "안녕하세요"를 5번 출력하는 것이다.

 

*매개변수와 관련된 TypeError

함수를 생성할때 매개변수를 만들고, 함수를 호출할 때 매개변수를 넣지 않거나 더 많이 넣으면 TypeError가 발생된다.

함수를 호출할때는 함수를 선언할때와 같은 개수의 매개변수를 입력해야하는 점을 유의하자.

 

가변 매개변수

앞서 함수를 선언할 때의 매개변수와 함수를 호출할때의 매개변수가 같아야 하는것을 배웠다.

하지만 가변 매개변수를 이용하면 매개 변수를 원하는 만큼 받을 수 있다.

가변 매개변수를 매개변수 개수가 변할수 있다는 의미이며 아래와 같은 형태로 만들 수 있다.

def 함수이름(매개변수,매개변수, ... , *가변매개변수):
	문장

가변 매개변수를 사용할때에는 다음과 같은 제약이 있다.

  • 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다.
  • 가변 매개변수는 하나만 사용할 수 있다.
def print_n_times(n, *values):
    for i in range(n):
        for value in values:
            print(value)

print_n_times(3, "안녕", "즐거운", "파이썬")

예제 코드에서는 일반 매개변수 n을 앞으로 옮기고 가변매개변수 *values를 뒤에 선언하였다.

가변 매개변수 *values는 리스트처럼 사용할 수 있다.

 

기본 매개변수

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

print() 함수를 예시로 살펴보면 가장 앞에 있는 value가 '가변 매개변수'이다.

앞서 가변매개변수 뒤에는 일반 매개변수가 올 수 없다고 하였는데 value 뒤에 매개변수가 나열된 것을 볼 수 있다.

그리고 해당 매개변수들은 '매개변수=값'의 형태로 되어있는데 이를 기본 매개변수라고 한다.

 

기본 매개변수는 매개변수를 입력하지 않았을 경우 매개변수에 들어가는 기본값이다.

기본 매개변수 뒤에도 일반 매개변수는 올 수 없다.

def print_n_times(value,n=2):
    for i in range(n):
        print(value)
print_n_times("안녕") # 안녕 x 2번 출력
print_n_times("Hello",5) # Hello x 5번 출력

매개변수 n을 n=2라는 기본매개변수로 생성했을 때 n을 입력하지 않을 경우 기본값이 2로 들어간다.

 

키워드 매개변수

1) 기본 매개변수가 가변 매개변수보다 앞에 올 때

기본매개변수가 가변매개변수보다 앞에 올때는 기본 매개변수의 의미가 사라진다.

def print_n_times(n=2,*values):
    for i in range(n):
        for value in values:
            print(value)
print_n_times("안녕","즐거운","파이썬")

예제코드에서 매개변수가 순서대로 입력되므로 n에는 "안녕"이 들어가고 values에는 ["즐거운","파이썬"]이 들어간다.

그런데 range()함수의 매개변수에는 숫자만 들어갈 수 있으므로 TypeError가 발생된다.

따라서 기본매개변수는 가변 매개변수 앞에 써도 의미가 없는점을 유의하자.

 

2) 가변 매개변수가 기본 매개변수보다 앞에 올 때

반대로 가변 매개변수가 기본매개변수보다 앞에 올때는 가변 매개변수가 우선시 된다.

def print_n_times(*values,n=2):
    for i in range(n):
        for value in values:
            print(value)
print_n_times("안녕","즐거운","파이썬",3) # 안녕 즐거운 파이썬 3 x 2번 출력

예제코드에서 values 가변 매개변수에 ["안녕","즐거운","파이썬","3"] 이 들어가고 n 에는 기본매개변수 값인 2가 적용되었다.

 

파이썬 프로그래밍 언어는 위의 두 상황을 대비한 키워드 매개변수 기능이 있다.

키워드 매개변수는 매개변수 이름을 직접적으로 지정해서 값을 입력한다.

def print_n_times(*values,n=2):
    for i in range(n):
        for value in values:
            print(value)
print_n_times("안녕","즐거운","파이썬",n=3) # 안녕 즐거운 파이썬 x3번 출력

이처럼 매개변수 이름을 지정해서 값을 입력하는 매개변수(n=3)를 키워드 매개변수라고 한다.

 

3) 기본 매개변수 중에서 필요한 값만 입력하기

키워드 매개변수는 기본 매개변수들로 구성된 함수에서도 많이 사용된다.

def test(a,b=10,c=100):
    print(a,b,c)

test(10,20,30)         #10 20 30
test(a=10,b=100,c=200) #10 100 200
test(c=10,a=100,b=200) #100 200 10
test(10,c=200)         #10 10 200
test(4)                #4 10 100
test(b=30)   # TypeError

위 예제에서 첫번째 매개변수 a는 일반매개변수이므로 해당 위치에 반드시 입력해야하고,

매개변수 b와 c는 일반매개변수이지만 키워드 매개변수처럼 값을 입력하여 선언하였다.

 

키워드를 지정해서 매개변수를 입력하는 경우에는 위 예제처럼 매개변수 순서를 원하는대로 입력하거나,

필요한 매개변수에만 값을 전달할 수 있다.

이때 일반매개변수 a는 필수로 입력해야하므로, 매개변수 a의 값을 입력하지 않고 함수를 호출하면 오류가 발생된다.

 

리턴

함수의 결과를 리턴값(return value)이라고 부른다.

return 키워드는 함수를 실행했던 위치로 돌아가라는 의미와 함수를 여기서 끝내라는 의미를 가지고 있다.

 

def return_test():
    print("A위치입니다.")
    return
    print("B위치입니다.")
return_test()   # "A위치입니다." 만 출력

위 예제에서 return키워드를 만나는 순가 함수가 종료되어 결과적으로 "A위치입니다"만 출력되고 프로그램이 종료된다.

이 때 return 키워드 뒤에 자료를 입력하면 해당 자료를 가지고 리턴하게된다.

def return_test():
    return 100
value = return_test()
print(value) # 100 출력

만약 아무 값도 가지지 않고 return 하게되면 value = None이 출력된다. (None : 파이썬에서 '없다'는 의미)

 

기본적인 함수의 활용

def 함수(매개변수):
	변수 = 초기값
    실행할 명령
    return 변수

일반적으로 함수는 위와같이 return 하는 형태로 많이 사용한다.

 

정해진 범위 내의 정수를 모두 더하는 함수의 예제를 살펴보자.

def sum_all(start,end):
    output=0
    for i in range(start,end+1):
        output+=i
    return output
print(sum_all(0,100))   # 5050
print(sum_all(50,100))  # 3825
print(sum_all(50,1000)) # 499275

위 예제를 기본 매개변수와 키워드 매개변수를 활용하면 아래와 같이 만들 수도 있다.

def sum_all(start,end):
    output=0
    for i in range(start,end+1):
        output+=i
    return output
print(sum_all(0,100))   # 5050
print(sum_all(50,100))  # 3825
print(sum_all(50,1000)) # 499275

 

반응형

댓글