Roel Notebook

[Python] 파라미터 앞에 *, ** 의 의미? (*args, **kwargs)

by Roel Downey
728x90
반응형

참고 : http://stackoverflow.com/questions/3394835/args-and-kwargs

 

다른사람들이 작성한 python 코드를 보다보면

*args, **kwargs 를 심심치 않게 본다.

그냥 막연하게 "어떤 파라미터를 몇개를 받을지 모르는 경우 사용한다" 라고 알고 있었지만

 

 

*args

- arguments 의 줄인 표현

- 파라미터를 몇개를 받을지 모르는 경우 사용한다.

- args 는 튜플 형태로 전달된다.

 

예제)

def print_param(*args):
    print(f"> agrs : {args}")

    for p in args:
        print(f"> arg - {p}")


print_param("a", "b", "c", "d")

Output

# > args : ('a', 'b', 'c', 'd')
# > arg - a
# > arg - b
# > arg - c
# > arg - d

 

**kwargs

- keyword arguments 의 줄인 표현

- 파라미터 명을 같이 보낼 수 있다.

- kwargs는 딕셔너리 형태로 전달된다.

 

예제)

def print_param2(**kwargs):
    print(f"> kwargs : {kwargs}")
    print(f"> kwargs.keys() : {kwargs.keys()}")
    print(f"> kwargs.values() : {kwargs.values()}")

    for key, value in kwargs.items():
        print(f"> key, value - {key} : {value}")


print_param2(first="a", second="b", third="c", fourth="d")

Output

# > kwargs: {'first': 'a', 'second': 'b', 'third': 'c', 'fourth': 'd'}
# > kwargs.keys(): dict_keys(['first', 'second', 'third', 'fourth'])
# > kwargs.values(): dict_values(['a', 'b', 'c', 'd'])
# > key, value - first: a
# > key, value - second: b
# > key, value - third: c
# > key, value - fourth: d

 

그러면 두개를 같이 쓰는 예제를 보자!

 

예제)

def print_param3(*args, **kwargs):
    print(f"> args : {args}")
    print(f"> kwargs : {kwargs}")


print_param3("a", "b")

# args : ('a', 'b')
# kwargs : {}

print_param3(third="c", fourth="d")

# args : ()
# > kwargs : {'third': 'c', 'fourth': 'd'}

print_param3("a", "b", third="c", fourth="d")

# args : ('a', 'b')
# > kwargs : {'third': 'c', 'fourth': 'd'}

 

 

응용 해 보자! 

예제)

def print_param4(a, b, c):
    print(f"> a,b,c - {a, b, c}")


p = ["a", "b", "c"]
print_param4(*p)

# > a,b,c - ('a', 'b', 'c')

p2 = {"c": "1", "a": "2", "b": "3"}
print_param4(**p2)

# > a,b,c - ('2', '3', '1')



728x90
반응형

블로그의 정보

What doing?

Roel Downey

활동하기