본문 바로가기
[Language] - Python

#0. args, kwargs

by Bebsae 2020. 12. 9.

해당 카테고리에는 파이썬의 기초문법(반복문, 조건문, 변수, 클래스 등..)을 숙지하고 있다는 전재하에 작성한다. 파이썬 개발을 하면서 몰랐던 키워드나 개념등을 위주로 작성할 예정이다..

 

개발을 하다보면 어떤 클래스의 정의를 찾아갈 때 Pycharm기준으로 Ctrl + B 단축키를 사용하면 된다. 메소드의 정의를 찾아간다고 가정할 때, 종종 *args 나 **kwargs 키워드를 본적이 있을 것이다. 필자는 무아지경상태에 빠졌다. 무아지경은 지를 무렇 않게 받아들이는 지를 의미한다. 그 경지를 넘어서고자 이 키워드들을 이해하기 위해 공부를 하고 이해한 내용을 포스트에 정성스레 적는다.

 

일단 args와 kwargs의 뜻부터 알아보자.

 

args : arguments (복수형) 즉, 가변(여러개가 올 수 있는) 인자이다.  

kwargs : keyword argument가변 키워드 인자이다.

 

이제 코드로 이해할 차례이다.

def arg_func(*args):
    for idx, arg in enumerate(args):
        print(idx, arg)
        
if __name__ == '__main__':
    # 인자에 직접 입력
    arg_func(10, 20, 'a')
    
    # 리스트로 입력
    l = [10, 20, 'a']
    arg_func(*l)

arg_func(10, 20, 'a')를 호출하게 되면 *args인자에는 10, 20, 'a'가 담긴 리스트가 전달된다. 고로 인자에 직접 입력해주어도 되지만 리스트를 통째로 보내도 된다. 리스트의 길이는 상관없다. (가변이니까)

 

def kwarg_func(**kwargs):
    for item in kwargs.item():
        print(item)
        
if __name__ == '__main__':
    kwarg_func(x=10, y=20, z='a')
    
    d = {'x': 10, 'y': 20, 'z': 'a'}
    kwarg_func(**d)

kwargs_func(x=10, y=20, z='a')를 호출하게 되면 **kwargs에는 키(워드)값이 x, y, z인 딕셔너리가 전달된다. *arg와 마찬가지로 길이는 상관없다.

 

출력결과는 적지않겠다. 직접 해보기를 바라는 마음에서.. 

'[Language] - Python' 카테고리의 다른 글

#5. 덕 타이핑 (Duck Typing)  (2) 2020.12.29
#4. 추상 클래스 (Abstract Class)  (0) 2020.12.28
#3. pickle 모듈  (0) 2020.12.18
#2. 접근제한자 (Access Modifier)  (0) 2020.12.14
#1. staticmethod, classmethod, instancemethod  (0) 2020.12.09

댓글