파이썬에서 아래와 같이 *args
, **kwars
를 사용하는 함수를 볼 때가 있습니다. arguments를 받는 인자인 것 같은데 *
나 **
같은 것 때문에 혼란스럽기만 합니다. 이번 글에서는 args
와 kwars
의 차이점에 대해서 알아보겠습니다.
def myFun1(*args):
...
def myFun2(**kwargs):
...
1. '*args' : 함수에서 여러개의 인자 n개를 받을 때
*args
(arguments)는 함수에서 여러개의 인자, n개를 받을 때 사용합니다.
아래 함수는 3개의 인자를 받습니다. 하지만 4개의 인자를 받으려면, 함수를 수정해야 합니다. 아니면 인자 개수가 다른, 두개 이상의 함수를 만들어할지도 모릅니다.
def myFun(arg1, arg2, arg3):
print('arg1:', arg1)
print('arg2:', arg2)
print('arg3:', arg3)
myFun('Hello', 'World', 'Python')
만약 정해지지 않은 n개의 인자를 받고 싶을 때, 다음과 같이 *args
를 사용할 수 있습니다. 개발 중에, 이 함수에 2개 또는 4개의 인자를 전달할 필요가 있을 때에도 함수는 1개만 구현하면 됩니다.
def myFun(*args):
print('args:', args)
for arg in args:
print(arg)
myFun('Hello', 'World')
myFun('Hello', 'World', 'Python', '!!!')
Output:
args: ('Hello', 'World')
Hello
World
args: ('Hello', 'World', 'Python', '!!!')
Hello
World
Python
!!!
'*args'의 특징
- args 앞에
*
를 1개 붙여야 합니다. - n개의 인자를 Tuple로 전달합니다.
2. '**kwargs' : 함수에서 여러개의 인자 n개를 key-value 형태로 받을 때
**kwargs
(keyword arguments)는 함수에서 여러개의 인자 n개를, key-value 형태로 받을 때 사용합니다.
아래 코드에서 key1 = value2, key2 = value2 ...
처럼 딕셔너리로 인자를 전달합니다. 그럼 함수에서 딕셔너리로 인자를 받아서 사용할 수 있습니다.
def myFun(**kwargs):
print(kwargs)
for key, value in kwargs.items():
print(f"key = {key}, value = {value}")
print('arg1:', kwargs['arg1'])
print('arg2:', kwargs['arg2'])
print('arg3:', kwargs['arg3'])
myFun(arg1 ='Hello', arg2 ='World', arg3='Python')
Output:
{'arg1': 'Hello', 'arg2': 'World', 'arg3': 'Python'}
key = arg1, value = Hello
key = arg2, value = World
key = arg3, value = Python
arg1: Hello
arg2: World
arg3: Python
'**kwargs'의 특징
- kwargs 앞에
**
를 붙여야 합니다. - n개의 인자는 key와 value를 갖고 있고, 딕셔너리로 전달합니다.
3. '*args'와 '**kwargs'를 함께 사용하는 예제
아래 코드는 *args
와 **kwargs
를 함께 사용하는 예제입니다.
def myFun(*args, **kwargs):
for arg in args:
print(arg)
for key, value in kwargs.items():
print(f"key = {key}, value = {value}")
myFun('This', 'is', 'an example', arg1 ='Hello', arg2 ='World', arg3='Python')
Output:
This
is
an example
key = arg1, value = Hello
key = arg2, value = World
key = arg3, value = Python
References
Loading script...
Related Posts
- Python - Yaml 파일 파싱하는 방법
- Python - 파일 내용 삭제
- Python - for문에서 리스트 순회 중 요소 값 제거
- Python - 두 리스트에서 공통 요소 값 찾기
- Python - 문자열 앞(뒤)에 0으로 채우기
- Python - 공백으로 문자열 분리
- Python - 중첩 리스트 평탄화(1차원 리스트 변환)
- Python - 16진수 문자열을 Int로 변환
- Python - 두 날짜, 시간 비교
- Python f-string으로 변수 이름, 값 쉽게 출력 (변수명 = )
- Python - nonlocal과 global 사용 방법
- Python 바다코끼리 연산자 := 알아보기
- Python - pip와 requirements.txt로 패키지 관리
- Python - 딕셔너리 보기 좋게 출력 (pprint)
- Python - Requests 사용 방법 (GET/POST/PUT/PATCH/DELETE)
- Python - 온라인 컴파일러 사이트 추천
- Python - os.walk()를 사용하여 디렉토리, 파일 탐색
- Python - 문자열 비교 방법
- Python - Text 파일 읽고 쓰는 방법 (read, write, append)
- Python - 리스트에서 첫번째, 마지막 요소 가져오는 방법
- Python - 두개의 리스트 하나로 합치기
- Python - 리스트의 마지막 요소 제거
- Python - 리스트의 첫번째 요소 제거
- Python 소수점 버림, 4가지 방법
- Python 코드 안에서 버전 확인 방법
- Python 소수점 반올림, round() 예제
- Python - 리스트 평균 구하기, 3가지 방법
- Python - bytes를 String으로 변환하는 방법
- Python - String을 bytes로 변환하는 방법
- Python 버전 확인 방법 (터미널, cmd 명령어)
- Python - 람다(Lambda) 함수 사용 방법
- Python - dict 정렬 (Key, Value로 sorting)
- Python - range() 사용 방법 및 예제
- Python - 리스트를 문자열로 변환
- Python - 문자를 숫자로 변환 (String to Integer, Float)