파라미터에 **랑 *는 뭔가요?

밑의 코드에서 param2에 붙은 ***는 무슨 일을 하나요?

소스코드

def foo(param1, *param2):
def bar(param1, **param2):

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    *args, **kwargs 는 0개 이상의 인자를 받을 때 쓰입니다. 인자가 하나도 안 들어오는 경우도, 10개, 100개가 들어오는 경우도 수용해 주지요.

    *args 는 함수의 파라미터를 tuple로 저장하고 있습니다.

    def foo(*args):
        for arg in args:
            print arg
    
    print "---foo()---"
    foo()
    
    print "\n---foo(1)---"
    foo(1)
    
    print "\n---foo(1,2,3,4,5)---"
    foo(1,2,3,4,5)
    

    결과:

    ---foo()---
    
    ---foo(1)---
    1
    
    ---foo(1,2,3,4,5)---
    1
    2
    3
    4
    5
    

    **kwargskeyword argument를 dictionary로 저장하고 있습니다(단,formal parameter를 제외)

    def foo(keyword=3, **kwargs):
        for key in kwargs:
            print key, kwargs[key]
    
    print "---foo()---"
    foo()
    
    print "\n---foo(number = 'one')---"
    foo(number = 'one')
    
    print "\n---foo(keyword='1', temp1='hello', temp2='world!')---"
    foo(keyword=1, temp1='hello', temp2='world!')
    

    결과:

    ---foo()---
    
    ---foo(number = 'one')---
    number one
    
    ---foo(keyword='1', temp1='hello', temp2='world!')---
    temp2 world!
    temp1 hello
    

    *l은 함수의 인자에서 쓰이는 경우 list를 item으로 풀어줍니다.

    def foo(num1, num2):
        print num1, num2
    
    l = [1,2]
    foo(*l) #([1,2])가 아닌 (1,2)로 전달
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.