*args
*args가 무엇인지 알아보기에 앞서, 파이썬 프로그램에서 해당 문법을 사용할 때 꼭 *args라고 작성할 필요는 없다. args는 변수명이기 때문에 어떠한 변수명을 사용해도 무관하다. 하지만 앞의 *(별표) 는 꼭 붙어있어야 한다. 즉, *hojun 으로 사용해도 전혀 문제가 없다.
본격적으로 *args란 '가변인자'를 위한 변수입니다. 간단하게 풀어 설명하자면 함수의 인자를 즉, 파라미터를 몇 개 받을지 모르는 경우에 사용하게 됩니다.
def lastName_and_FirstName(*args):
for name in args:
print("%S %s" % (args[0], args[1:3], end=' ')
print("\n")
lastName_and_FirstName('김호준', '김민구')
lastName_and_FirstName('김호준', '김민구', '김재우', '김종환')
# 출력 예시
# 김 호준 김 민구
# 김 호준 김 민구 김 재우 김 종환
lastName_and_FirstName 함수에서는 *args를 인자로 받습니다. 하지만 *args는 *names나 *a, *b 등 아무 단어로 바꾸어도 상관없이 동작합니다. 또한 args를 출력해보면 tuple(튜플) 형태임을 알 수 있습니다. 여러 개의 인자로 함수를 호출할 때, 함수 내부에서는 튜블로 받은 것 처럼 인식한다는 것이죠
**kwargs
kwargs는 keyword argument의 줄임말로 키워드를 제공합니다. 또한 kwargs는 args와 마찬가지로 변수명은 hojun처럼 아무렇게나 입력해 사용해도 무관하다. 하지만 앞의 ** 두개는 필수라는 것을 명심하자.
또한 위의 args는 튜플 형태로 저장되지만, kwargs는 args와 비슷하면서 다르다. kwargs는 딕셔너리 형태로 값을 저장하며, args와 달리 파라미터명을 같이 보낼 수 있다.
def name_and_age(**kwargs):
print(kwargs)
name_and_age(name="김호준", age="28")
# 출력예시
# {'age':'50', 'name':'김호준'}
name_and_age 함수 안에 kwargs라는 딕셔너리를 만들고 그 안에 age와 name을 넣는다고 생각하면 될 것이다. kwargs를 조금 다르게 사용하는 예시를 아래에 작성해보았다.
def introduceEnglishName(**kwargs):
for key, value in kwargs.items():
if 'ant' in kwargs.keys():
print("작성자님 반갑습니다. 오늘 기분이 어떠신가요?")
else:
print("{0} is {1}" .format(key, value))
introduceEnglishName(MyName='Hojun')
introduceEnglishName(ant='Hojun')
# 출력예시
# MyName is Hojun
# 작성자님 반갑습니다. 오늘 기분이 어떠신가요?
키워드(딕셔너리의 key 부분의 값) 가 ant로 들어왔을 때는 "작성자님 반갑습니다 ... "로 저만의 서비스를 작성해보았습니다.
*args와 **kwargs 동시에 사용하기
args와 kwargs를 사용할 때 주의할 점은 순서이다. 일반 변수가 가장 먼저와야 하고 그다음은 args 마지막으로 kwargs가 위치해야 한다. 순서를 바꿔 args가 가장 앞에 위치할 경우 args의 인자가 어디까지인지 파이썬은 파악하지 못하기 때문이다.
def number_and_name(*args, **kwargs):
print(args, kwargs)
number_and_name(1, 2, 3, name="홍길동")
### 출력값 ###
(1, 2, 3) {'name': 'GilDong Hong'}
함수에 키-값 형태로 된 인자를 전달하면 파이썬은 자동으로 kwargs에 저장해 준다. 또한 아래코드처럼 *args를 선언해놓고 사용하지 않을 수도 있다.
def name(*args, **kwargs):
print(args, kwargs)
name(name="GilDong Hong")
### 출력값 ###
() {'name': 'GilDong Hong'}
이런 경우에는 args에는 아무 값도 저장되지 않고 kwargs에만 키-값 형태로 저장되는 것을 볼 수 있다.
'Python 프로그래밍' 카테고리의 다른 글
Django Setting (0) | 2022.11.02 |
---|---|
PYQT 계산기 source code (0) | 2022.09.23 |
[Python] Asyncio (0) | 2022.06.05 |
[Python] GIL (0) | 2022.06.03 |
[Python] Coroutine (0) | 2022.06.02 |