파이썬 *args, **kwargs 관련 질문

조회수 321회
def custum_print(value, *args, **kwargs):
    print(value, *args, **kwargs)

custum_print(1, 2, 3, sep=':', end=' ')`

위 코드에서 print()안에 *args, **kwargs에는 통 *을 붙이지 않는게 올바르다고 하는데요. 그런데 저렇게 코드를 쓰게 되면 어떻게 동작하는건지 이해가 잘 안갑니다. 일단 위코드 출력값은 1:2:3입니다.

1은 value, 2,3은 args,이렇게 인식하는건지, 그렇다면 sep=':' end=' '는 딕셔너리로 인식해야 할 것 같은데 그건 아니게 출력되고, 그렇다고 * 붙일 때 인식안한다고 하면 1:2:3이렇게 출력되는 것도 신기합니다.

참고로..

def custum_print(value, *args, **kwargs):
    print(value, args, kwargs)

custum_print(1, 2, 3, sep=':', end='')

* 를 떼니 1 (2,3) {sep : ':' , end :} 이런식으로 나왔습니다.

지엽적인 질문이지만 어떻게 돌아가는 건지 궁금해서요.

1 답변

  • 직접 인자들을 print 해서 확인해 보거나, 아니면, vscode 에서 디버그 모드로 실행해 보면 궁금증을 좀 더 탐험해 볼 수 있을 것 같습니다.

    vscode 디버그 모드로 확인해 보니 (물론 print 문 등으로 각 인자들 값과 타입을 확인해 볼 수도 있겠습니다만, 디버거를 쓸 수 있으면 디버거를 씁시다.)

    custom_print 안에서 인자들의 값은

    • value : 1
    • args : tuple (2, 3)
    • kwargs : { 'sep': ':', 'end': ' ')

    이렇게 들어가 있었습니다.

    " *을 붙이지 않는게 올바르다" 는 건, 언제나 맞는 이야기는 아니고, 어떻게 사용할지에 따라 달라지는 것 같습니다.

    이정도의 질문을 올릴 열정이라면, 디버그모드로 반드시 스스로 확인해 보세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)