본문 바로가기

카테고리 없음

Python *(별표)파라메터 **(별별)파라메터

728x90

파이썬에서 함수의 파라메터 앞에 *또는 **이 붙어 있는 경우가 있습니다.

 

다른 언어에는 잘 없는 형태라서 파이썬을 처음 하시거나 익숙하지 않으신 분들은 이게 뭔가 싶을때가 있습니다.

 

* 파라메터

 

*는 쉽게 말하면 파라메터로 넘어오는 각 값들을 list형태로 받겠다는 뜻입니다.

 

코드를 보겠습니다.

def make_coffee(*matreials):
    mixed = ''
    for item in matreials:
        mixed += item
    print(mixed)

make_coffee('water', 'espresso')

결과

waterespresso

 

스타벅스에서 커피를 주문해서 알바생이 커피를 뽑아주는 상황을 생각 해보겠습니다.

위 make_coffee는 *materials라는 한개의 파라메터만 가지고 있습니다만 make_coffee('water', 'espresso') 이렇게 값 두개를 넘겨서 호출합니다.

 

커피 제조하는게 재료들을 하나의 컵에 섞으면 되는 것 아니겠습니까? 그래서 아메리카노는 물과 에스프레소를 섞구요

캐러맬 마끼야또는 아메리카노에 캐러멜을 섞는 레시피라고 했을때 '캐러멜'까지 추가 해주는 것입니다.

 

make_coffee('water', 'espresso', '캐러멜')

위와 같이 함수를 별도로 수정하지 않고 값을 3개를 넘기는 것도 가능합니다.

 

단순히 넣고 섞는 기능으로도 가능하게 만든다면 파이썬에서는 변수 하나를 선언한 후 *을 붙이고 리스트 처럼 사용하는 것이 가능합니다.

 

plus()함수인데 값이 몇개가 들어올지 모르는 경우

plus(a, b) 이렇게 만들면 값 2개밖에 못 더하지만 plus(*numbers) 이렇게 만들면 값이 몇개가 들어오는지를 몰라도 다 더할 수 있습니다.

def plus_all(*numbers):
    sum = 0
    for n in numbers:
        sum += n
    return sum

print(plus_all(1, 2))
print(plus_all(1, 2, 3))

결과

3

6

 

**파라메터

**kwargs 이런 이름과 형태를 많이 보셨을 것입니다. key word arguments 를 줄인게 kwargs가 아닌가 싶습니다.

이 경우는 함수를 호출 할 때 꼭 파라메터의 이름을 써주는 경우 **kwargs로 받을 수 있습니다.

def fn(**kwargs):
    print(kwargs)

fn(year=2, age=35)

결과

{'year': 2, 'age': 35}

 

def fn2(**kwargs):
    print(kwargs['year'], kwargs['age'])

fn2(year=2, age=35)

결과

2 35

 

end.

 

 

 

 

 

728x90