Python

[파이썬] 함수 매개변수 활용 (심화) - 3

소혜아빠 2021. 1. 20. 23:25

이전 포스팅에서 기본적인 매개변수를 사용하는 방법에 대해서 알려드렸습니다.

이번 포스팅에서는 여러 종류의 매개변수에 대해서 설명을 드리고자 합니다.

매개변수의 종류로는 가변 매개변수, 기본 매개변수, 키워드 매개변수로 총 3개의 매개변수가 있습니다.

 

1. 가변 매개변수

파이썬의 print()함수 같은 경우는 인자의 개수가 여러개가 들어가도 출력이 가능합니다.

예를 들면, print("안녕","하세요","저는","보롱남편","입니다")로 여러개의 문자열 인자를 선언해주어도 이러한 입력들을 정상적으로 출력합니다. 이와 같이 매개변수의 개수가 명확하지 않거나 여러개가 있어야 하는 경우 사용하는 것이 가변 매개변수입니다.

def 함수이름(매개변수, 매개변수, ... , *가변매개변수):
   코드...

가변 매개변수는 아래와 같은 특징을 갖고 있습니다.

  • 가변 매개변수 뒤에는 일반 매개변수를 사용할 수 없습니다.
  • 가변 매개변수는 함수에 하나만 사용할 수 있습니다.

이는 가변 매개변수가 어느 정도까지인지 가늠할 수 있게 하기 위해서 만들어진 파이썬만의 규칙입니다. 만약 일반 매개변수가 가변 매개변수 뒤에 위치한다면 어디까지가 가변 매개변수이고 어디부터가 일반 매개변수인지 구분할 수 없기 때문에 위의 특징을 갖게 된 것입니다.

print() 함수와 비슷한 가변 매개변수를 갖는 함수를 하나 만들어 보겠습니다.

print_n_strings(num, *values):
    for i in range(num):
    	# 함수 내에서 가변 매개변수는 리스트처럼 작용합니다.
        for value in values:
            print(value)
        # 줄바꿈
        print()
        
print_n_strings(3, "안녕하세요", "저는", "보롱남편입니다")

위의 print_n_strings(num, *values) 함수는 num 횟수만큼 *values 가변 매개변수를 터미널에 출력하는 함수입니다. 

가변 매개변수 *value는 리스트처럼 사용하면 됩니다. 반복문을 사용해서 가변 매개변수를 모두 한차례 출력한 뒤 줄바꿈 후 다시 한차례 출력을 반복하는 함수입니다.

 

이렇게 매개변수로 활용할 인자의 수가 명확하지 않을 때에는 가변 매개변수로 함수 내에서 리스트처럼 활용하여 처리할 수 있습니다. 

 

2. 기본 매개변수

기본 매개변수는 매개변수 중에서 '기본값'을 갖는 매개변수입니다. 기본 매개변수의 형식은 '매개변수=값'의 형태로 되어있으며, 함수를 호출할 때 매개변수를 별도로 입력해주지 않아도 매개변수에 기본값으로 들어갑니다.

 

기본 매개변수의 특징은 아래와 같습니다.

  • 기본 매개변수 뒤에는 일반 매개변수가 올 수 없습니다. 

기본 매개변수 뒤에 일반 매개변수가 올 수 없는 이유는 가령 print_n_times(n=2, value)로 함수를 선언했을 때, 함수를 print_n_times("잘부탁드립니다")로 호출하게 되면 n이 매개변수인지, value가 매개변수인지 명확하게 알 수 없기 때문입니다.

또한, 기본 매개변수는 가변 매개변수 앞에 위치할 수 없습니다. 기본 매개변수가 가변 매개변수 앞에 위치한 함수가 있다고 할 때 호출 시 인자로 기본 매개변수를 빼고 매개변수 한개만 입력해놓고 함서를 호출한다면 입력된 인자 한개가 현재 어떤 매개변수를 지칭하는지 구분 할수가 없기 때문입니다.

아래 예제를 통해 기본 매개변수가 어떻게 작용하는지 보겠습니다.

def print_n_times(value, n = 3):
    for i in range(n):
        print(value)
        
print_n_times("잘부탁드립니다")

print_n_times라는 함수를 선언하면서 3의 기본값을 갖는 매개변수 n을 일반 매개변수 value 뒤에 선언하였습니다.

아래 print_n_times 함수를 호출할 때 value에 들어갈 문자열 "잘부탁드립니다"만 지정해준 다음 호출했을 때 이에 대한 출력은 아래와 같습니다.

잘부탁드립니다
잘부탁드립니다
잘부탁드립니다

별도로 지정해주지 않은 반복횟수 (기본 매개변수, n)의 기본값 3회에 걸쳐서 value ("잘부탁드립니다")가 출력되는 것을 확인할 수 있습니다. 만약 위에서 print_n_times 함수를 호출할 때 "잘부탁드립니다" 뒤에 반복 횟수를 매개변수로 넣어줬다면 그 횟수만큼 문자열을 출력했을 것 입니다.

 

3. 키워드 매개변수

키워드 매개변수는 어떠한 함수를 호출할 때 함수 내에 있는 매개변수의 명칭을 직접 지정해서 값을 입력해줄 때 사용하는 매개변수입니다.

위에서 기본 매개변수를 설명하기 위해서 사용한 예제를 가지고 오면 키워드 매개변수는 아래와 같이 활용할 수있습니다.

def print_n_times(value, n = 3):
    for i in range(n):
        print(value)
        
print_n_times("잘부탁드립니다", n = 5)

바로 위에 있는 예제처럼 함수를 호출할 때 함수 내에 있는 매개변수의 변수명을 직접 지정해서 값을 입력하는 것이 키워드 매개변수입니다.

 

4. 기본 매개변수와 키워드 매개변수를 함께 활용할 때

3개의 정수의 합을 나타내는 함수를 구현한다고 하면 아래와 같습니다.

def sum_three_num(a, b = 30, c = 40):
    print("{}".format(a+b+c))

일반 매개변수 a와 기본값을 30, 40으로 받는 b, c 기본 매개변수를 선언하였습니다.

# 1번 기본형태
sum_three_num(10,20,30)

# 2번 키워드 매개변수로 모든 매개변수들의 값을 지정해주었을 때
sum_three_num(a = 10, b = 200, c = 300)

# 3번 키워드 매개변수로 모든 매개변수를 순서에 상관없이 값을 지정해주었을 때
sum_three_num(b = 100, c = 120, a = 50)

# 4번 키워드 매개변수로 일부 매개변수만 값을 지정해주었을 때
sum_three_num(20, c = 100)

위와 같이 기본 매개변수와 키워드 매개변수의 조합으로 여러 형태로 함수를 호출할 수 있는데요. 우선, 매개변수 a는 일반 매개변수로 선언되었으니 함수를 호출할 때에는 반드시 값을 입력해주어야만 합니다.

 

또한, 일반 매개변수인 a는 함수를 호출할 때에 a=10, a=50과 같이 키워드 매개변수처럼 사용할 수 있습니다. (2번, 3번).

3번의 경우처럼 키워드 매개변수를 쓸 때에는 매개변수의 순서에는 상관없이 값을 입력해줄 수 있는 특징도 있습니다.

 

4번의 경우에는 기본 매개변수 b를 제외하고 다른 매개변수들의 값을 지정했을 때에는 기본 매개변수로 선언된 b는 30으로 기본값이 들어가게 될 것입니다. 일반 매개변수는 반드시 함수를 호출할 때 값을 입력해주어야 한다는 점을 잊으시면 안되겠습니다. 마지막으로 출력값은 아래와 같습니다.

60
510
270
150

 

지금까지 다양한 매개변수의 활용을 알아보았는데요. 직접 함수를 선언하고 호출해서 활용할 때와 다른 사람들이 짠 코드를 확인할 때에도 해당 매개변수들의 종류와 활용법을 알고 계셔야 코드가 어떻게 돌아갈지 시뮬레이션이 가능하기 때문에 숙지하고 계시는게 좋을 것 같습니다. 

 

@출처 : [도서] 혼자공부하는파이썬 (윤인성)