매개변수와 인자의 차이 : 매개변수(Parameter)와 인자(Argument)
기본적인 매개변수와 인자
가장 기본적인 사용방법입니다.
def add(a, b):
print(f"a = {a}, b = {b}")
add(3, 5)
add(a, b) 함수를 호출하면
매개변수 a와 b에 각각 3과 5가 전달되고
실행결과는
a = 3, b = 5가 됩니다.
위와 같은 코드의 경우 인자를 전달할 때 인자의 전달 순서가 큰 의미는 없지만,
아래와 같은 코드를 살펴보면 인자의 전달 순서가 중요함을 알 수 있습니다.
def print_user_info(name, age):
print(f"이름: {name}, 나이: {age}")
print_user_info("홍길동", 30)
위 코드의 결과는 아래와 같습니다.
이름 : 홍길동, 나이 : 30
만약 위 코드에서 print_user_info 함수 호출 시 인자를 아래와 같이 사용하면
전혀 엉뚱한 결과가 나타납니다.
def print_user_info(name, age):
print(f"이름: {name}, 나이: {age}")
print_user_info(30, "홍길동")
이 코드를 실행하면 아래와 같은 결과가 나타납니다.
이름 : 30, 나이 : 홍길동
이렇게 인자를 전달할 때 인자의 순서를 정확히 맞추어야 한다는 단점이 있습니다.
순서를 맞추지 않아 에러가 발생한다면 에러를 처리하면 되지만,
에러가 발생하지 않고 프로그램이 실행된다면 의도치 않은 결과가 나타날 수 있습니다.
키워드 인자
인자의 전달 순서에 구애받지 않고, 매개변수의 이름과 함께 값을 전달하는 방식입니다.
함수를 호출할 때 매개변수의 이름과 함께 값을 전달하면,
순서에 상관없이 해당 매개변수에 값이 정확히 전달이 됩니다.
def print_user_info(name, age):
print(f"이름: {name}, 나이: {age}")
print_user_info(age=30, name = "홍길동")
위 코드는 의도한 대로 아래와 같이 결과가 나타납니다.
이름 : 홍길동, 나이 : 30
기본값 매개변수
기본값 매개변수는 함수를 정의할 때 매개변수에 미리 기본값을 설정해 두는 것을 말합니다.
함수 호출시에 해당 매개변수에 값을 전달하지 않으면, 기본값이 사용됩니다.
def print_user_info(name, age=30):
print(f"이름: {name}, 나이: {age}")
print_user_info("홍길동")
위 코드는 함수를 호출할 때 age 인자를 전달하지 않음에도
아래와 같이 결과가 나타납니다.
이름 : 홍길동, 나이 : 30
함수를 정의할 때 이미 age 매개변수의 기본값이 30으로 설정되어 있기 때문입니다.
age에 값을 전달하면 전달한 값으로 변경이 됩니다.
def print_user_info(name, age=30):
print(f"이름: {name}, 나이: {age}")
print_user_info("홍길동", 40)
위 코드의 결과는 다음과 같습니다.
이름 : 홍길동, 나이 : 40
age 매개변수의 기본값이 30이더라도,
함수 호출 시에 age 매개변수에 값을 전달하면
기본값은 무시되고 전달된 값을 age 매개변수의 값으로 사용합니다.
가변길이 매개변수 : *arg
함수에 전달되는 인자의 개수가 정해지지 않을 때 사용하는 매개변수를 가변길이 매개변수라고 합니다.
즉, 함수가 호출될 때 지정된 인자가 정해져 있지 않거나 여러 개의 인자가 전달되었을 경우
유용하게 사용됩니다.
*arg 는 입력받은 모든 인자들을 튜플 형태로 담습니다.
※ 튜플에 대한 설명 : 파이썬 튜플(Python Tuple)
예시코드
def calculate_sum(*args):
total = 0
for num in args:
total += num
return total
result = calculate_sum(1, 2, 3, 4, 5)
print(result)
가변길이 매개변수 : **kwargs
*arg와 비슷하지만
**kwargs는 함수에 키-값 쌍으로 된 인자들을 받기 위한 매개변수입니다.
**kwargs 는 입력받은 모든 키-값 쌍들을 딕셔너리 형태로 저장합니다.
※ 딕셔너리에 대한 설명 : 파이썬 Dictionary
예시코드
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="John", age=30, city="New York")
다양한 함수 호출방식 예시
def my_function(a, b=2, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
my_function(1)
(결과)
a: 1
b: 2
args: ()
kwargs: {}
def my_function(a, b=2, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
my_function(1, 3, 4, 5, name="홍길동", age=30)
(결과)
a: 1
b: 3
args: (4, 5)
kwargs: {'name': '홍길동', 'age': 30}
def my_function(a, b=2, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
my_function(1, 3, 4, 5, '홍길동', age=30)
(결과)
a: 1
b: 3
args: (4, 5, '홍길동')
kwargs: {'age': 30}
def my_function(a, b=2, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
my_function(a=1, b=3, x=4, y=5)
(결과)
a: 1
b: 3
args: ()
kwargs: {'x': 4, 'y': 5}
def my_function(a, b=2, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
my_function(1, name='홍길동', age=30, city='서울')
(결과)
a: 1
b: 2
args: ()
kwargs: {'name': '홍길동', 'age': 30, 'city': '서울'}
def my_function(a, b=2, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
my_list = [11, 12, 13]
my_function(*my_list)
(결과)
a: 11
b: 12
args: (13,)
kwargs: {}
def my_function(a, b=2, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
my_list = [11, 12, 13]
my_function(my_list)
(결과)
a: [11, 12, 13]
b: 2
args: ()
kwargs: {}
여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.
'파이썬(Python)' 카테고리의 다른 글
[ Random ] 파이썬 웹스크래핑 무작위 시간만큼 기다리기 (0) | 2024.10.02 |
---|---|
[ Request ] Request 라이브러리 Get과 Post (1) | 2024.10.02 |
[ Playwright ] 파이썬 웹페이지 자동화 : playwright 네이버 접속하기 (0) | 2024.09.19 |
[ 기본 ] Python 함수의 기본 구조 : 매개변수(Parameter)와 인자(Argument) (1) | 2024.09.15 |
[ Basic ] 파이썬에서 변수의 값 교환하기, 변수의 교환 (0) | 2024.09.01 |