-
파이썬 | 사용자 정의 함수(2): 매개변수와 전달인자Programming/Python 2025. 6. 13. 18:00
1. 매개변수
매개변수 매개변수(parameter)는 함수를 정의할 때 괄호 안에 선언하는 변수로, 함수가 호출될 때 매개변수로 선언한 변수의 개수만큼 값을 받아들이도록 지정한다. 함수를 호출할 때 괄호 안에 입력한 값은 매개변수로 정의된 변수에 저장되어 함수 내부로 전달된다. 매개변수는 크게 ▲위치 매개변수와 ▲키워드 매개변수로 구분할 수 있다.
1.1. 위치 매개변수
위치 매개변수 위치 매개변수는 기본값 없이 단일한 변수의 이름으로 정의되며, 기본값이 설정되어 있지 않기 때문에 함수를 호출할 때 반드시 위치 매개변수의 개수만큼은 값을 할당해야 한다. 함수에 할당된 매개변수보다 많거나 적게 값을 할당하면 오류가 발생한다. 세 개의 위치 매개변수를 할당한 사용자 정의 함수의 예시는 다음과 같다.
def positional_parameter(num1, num2, num3): # 위치 매개변수 3개 result = (num1 * 10) + num2 + (num3 * 0.1) print(result) positional_parameter(1, 1, 1) positional_parameter(3, 1, 2)
1.2. 키워드 매개변수
키워드 매개변수 키워드 매개변수는 변수의 이름과 기본값의 쌍으로 정의되는 매개변수이다. 기본값이 설정되어 있으므로 함수를 호출할 때 기본값이 아닌 새로운 값을 할당하는 경우가 아니라면 할당할 필요는 없다. 새로운 값을 할당하고자 한다면 키워드 매개변수를 정의할 때와 마찬가지로 괄호 안에 변수의 이름과 새로운 값의 쌍으로 입력한다. 키워드 매개변수를 변수의 이름과 새로운 값의 쌍으로 입력한다면, 키워드 매개변수 사이의 순서는 상관 없으나, 위치 매개변수가 키워드 매개변수보다 항상 앞에 배치되어야 한다. 세 개의 위치 매개변수와 두 개의 키워드 매개변수를 할당한 사용자 정의 함수의 예시는 다음과 같다.
# 위치 매개변수 3개 + 키워드 매개변수 2개 def keyword_parameter(num1, num2, num3, cof1=10, cof2=0.1): result = (num1 * cof1) + num2 + (num3* cof2) print(result) keyword_parameter(1, 1, 1) # 키워드 매개변수의 기본값 사용 keyword_parameter(3, 1, 2, cof1=100, cof2=0.01) # 키워드 매개변수에 새로운 값 할당 keyword_parameter(3, 1, 2, cof2=0.01, cof1=100) # 키워드 매개변수는 위치와 무관
1.3. 곱하기 단항 연산자
함수에 할당된 매개변수의 위치만 잘 지킨다면, 아래 예시처럼 키워드 매개변수 또한 위치 매개변수처럼 변수의 이름 없이 값만 입력하는 것이 가능하다. 하지만 키워드 매개변수 자리에는 변수의 이름과 새로운 값의 쌍으로만 입력하도록 강제하고 싶다면 괄호 안에 곱하기 단항 연산자를 변수처럼 끼워넣으면 된다. 곱하기 단항 연산자 뒤에 위치한 매개변수로는 오직 키워드 매개변수만 할당할 수 있으며, 입력 형식 또한 변수의 이름과 새로운 값의 쌍으로 강제된다.
def example1(num1, num2, num3, cof1=10, cof2=0.1): result = (num1 * cof1) + num2 + (num3* cof2) print(result) # 곱하기 단항 연산자로 키워드 매개변수 형식 강제 def example2(num1, num2, num3, *, cof1=10, cof2=0.1): result = (num1 * cof1) + num2 + (num3* cof2) print(result) example1(1, 1, 1, 100, 0.01) example2(3, 1, 2, cof1 = 100, cof2 = 0.01) # 키워드 매개변수 형식 강제
1.4. 튜플 패킹 단항 연산자
튜플 패킹 단항 연산자 앞선 예시들은 함수를 정의하는 단계에서 위치 매개변수의 개수가 정해져있었다. 만약 사용자로부터 임의의 개수의 값을 받아 처리하고자 한다면, 함수를 정의할 때 매개변수 앞에 곱하기 단항 연산자(*)를 붙이면 된다. 아래 예시와 같이 사용자가 함수를 호출할 때 괄호 안에 여러 개의 값을 입력하더라도, 해당 값들이 하나의 매개변수에 튜플로 묶여 함수 내부로 전달된다.
def num_to_str(*numbers): # 튜플 패킹 result = [] for number in numbers: result.append(str(number)) print(result) num_to_str(1) num_to_str(1, 2, 3, 4, 5) num_to_str(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
1.5. 딕셔너리 패킹 단항 연산자
딕셔너리 패킹 단항 연산자 키워드 매개변수도 마찬가지로 임의의 개수의 값을 받아 처리할 수 있다. 함수를 정의할 때 매개변수 앞에 제곱 단항 연산자(**)를 붙이면 된다. 아래 예시와 같이 사용자가 함수를 호출할 때 괄호 안에 키와 값의 쌍으로 이루어진 값들을 입력하면, 해당 쌍들을 하나의 매개변수에 딕셔너리로 묶어 함수 내부로 전달한다.
def item_info(name, specification, **info): # 딕셔너리 패킹 print('----------') print('이름: ', name) print('규격: ', specification) for key in info: print(f'{key}: {info[key]}') item_info('볼트', 'M4') item_info('너트', 'M3', 재질='스테인리스') item_info('와셔', 'M6', 재질='철', 수량=100)
1.6. *args, **kwargs*args, **kwargs 위와 같은 형태의 매개변수는 다른 사용자가 정의한 함수의 문서를 확인할 때 자주 발견할 수 있는데, 이는 함수가 임의 개수의 위치 매개변수와 임의 개수의 키워드 매개변수를 할당 받는다는 것을 의미한다. 이처럼 튜플 패킹 단항 연산자와 딕셔너리 패킹 단항 연산자를 사용하면 다양한 값을 처리할 수 있는 유연한 함수를 만들 수 있다.
def newFunc(*args, **kwargs): # 튜플 패킹, 딕셔너리 패킹 for i, arg in enumerate(args): print(f'위치 전달인자 {i} = {arg}') for key in kwargs: print(f'키워드 전달인자 {key} = {kwargs[key]}') newFunc(1, 2, 3, 4, 5, cof1=10, cof2=0.1)
2. 전달인자
전달인자 전달인자(argument)는 함수를 호출할 때 괄호 안에 입력하는 값으로, 함수를 정의할 때 할당한 매개변수를 통해 함수 내부로 전달된다. 매개변수와 마찬가지로, 전달인자는 크게 ▲위치 전달인자와 ▲키워드 전달인자로 구분할 수 있으며, 각 전달인자별로 함수에 값을 입력하는 방법은 앞선 예시에서 다룬 바와 동일하다. 다른 사용자가 정의한 사용자 정의 함수를 사용하는 경우에는 문서를 통해 어떤 매개변수가 위치 매개변수 혹은 키워드 매개변수인지 확인하고, 이에 맞게 전달인자를 입력해야 한다.
2.1. 튜플 언패킹 단항 연산자튜플 언패킹 단항 연산자 곱하기 단항 연산자(*)가 매개변수가 아닌 전달인자 앞에 붙을 경우에는 해당 전달인자에 담긴 리스트 혹은 튜플의 값들을 풀어 각 매개변수에 튜플 할당한다. 이때 풀어진 값들의 개수는 반드시 해당 함수의 위치 매개변수 개수와 같거나 적어야 한다. 튜플 언패킹으로 할당된 값의 개수가 매개변수 개수보다 적을 경우에는 아래 예시와 같이 쉼표로 구분하여 위치 전달인자를 추가할 수 있다.
def decimal_cof(num1, num2, num3): result = (num1 * 10) + num2 + (num3 * 0.1) print(result) example_list = [1, 1, 1] decimal_cof(*example_list) # 튜플 언패킹 example_tuple = (3, 1) decimal_cof(*example_tuple, 2)
2.2. 딕셔너리 언패킹 단항 연산자딕셔너리 언패킹 단항 연산자 제곱 단항 연산자(**)가 전달인자 앞에 붙을 경우에는 해당 전달인자에 담긴 딕셔너리의 키와 값의 쌍들을 풀어 각 매개변수에 할당한다. 이때 풀어진 쌍들의 개수는 반드시 해당 함수의 키워드 매개변수 개수와 같거나 적어야 하며, 매개변수에 이미 할당된 키값이 있다면 풀어진 쌍들의 키값이 일치해야 이에 상응하는 기본값이 새로운 값으로 갱신된다.
def item_info(name=None, specification=None, material=None, quantity=0): print('----------') print('이름: ', name) print('규격: ', specification) print('재질: ', material) print('수량: ', quantity) info = dict(name='볼트', specification='M4', material='스테인리스', quantity=50) item_info(**info) # 딕셔너리 언패킹
[함께 읽으면 좋은 페이지]
파이썬 | 사용자 정의 함수(1): def-return
1. 내장 함수 함수는 일련의 명령문들이 묶여 특정한 명령을 실행하는 단위를 의미한다. 파이썬에서는 특정한 기능을 담당하는 다양한 함수들을 기본적으로 제공하고 있으며, 이를 내장 함수라
vedacube.tistory.com
파이썬 | 사용자 정의 함수(3): 지역 변수와 전역 변수
1. 지역 변수 변수는 정의된 위치에 따라 변수 이름이 영향을 미치는 범위가 결정된다. 사용자 정의 함수 내에서 정의된 변수를 지역 변수(local variable)라고 하며, 해당 함수 내에서만 변수 이름이
vedacube.tistory.com
참고문헌
- 박진수. (2019). 바로 쓰는 파이썬. 서울대학교출판문화원.반응형'Programming > Python' 카테고리의 다른 글
파이썬 | 사용자 정의 함수(3): 지역 변수와 전역 변수 (0) 2025.06.20 파이썬 | 사용자 정의 함수(1): def-return (1) 2025.06.06 파이썬 | 예외 처리: try-except (1) 2025.05.23 파이썬 | 조건문과 반복문(3): break, continue (0) 2025.05.16 파이썬 | 조건문과 반복문(2): range, enumerate, zip (0) 2025.05.09