데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      python 가변인자에 대해서

      엘티엘 20.07.24
      1,110 4 0

      가변인자(variadic arguments)란?

        - 함수 parameter 개수가 정해지지 않았거나, 너무 많을 경우 사용

        - parameter를 동적으로 처리함

        - ex) print 함수

       

       

      가변인자에 대해서 알아보도록 하겠습니다.

      보통 print 함수처럼 인자의 개수를 미리 알 수 없거나, 인자의 개수가 너무 많아서 따로 정의하기 힘들경우 가변인자를 사용합니다.

      python에서 가변인자를 입력 받는 방식은 크게 2가지 입니다.

         -Positional 방식: 입력순서에 따른 list 형식 (*args)

        - Keyword 방식: keyword를 포함한 dict 형식 (**kwargs)

       

       

      아래는 가변인자를 입력받아서 출력해보는 간단한 예제입니다.

      args는 Poritional 방식이고, **kwargs는 Keyword 방식입니다 

      [코드]

      def vp_loc(*args):
          print(args)
      
      vp_loc(1, 2)
      vp_loc(1, 2, 3, 4)
      
      def vp_key(**kwargs):
          print(kwargs)
      
      vp_key(a=1, b=2)
      vp_key(a=1, b=2, c=3, d=4)
      

      [출력]

      입력을 list 또는 dict 형태로 저장해서 출력합니다.

      (1, 2)
      (1, 2, 3, 4)
      {'a': 1, 'b': 2}
      {'a': 1, 'b': 2, 'c': 3, 'd': 4}
      

       

       

      물론 2가지를 동시에 혹은 일반 parameter 와 동시에 사용하는 것도 가능합니다.

      다만, 이경우 Keyword 방식이 반드시 나중에 정의되어 있어야 합니다. 

      [코드]

      
      def vp_loc_key(*args, **kwargs):
          print(args, kwargs)
      
      vp_loc_key(1, 2, a=1, b=2)
      vp_loc_key(1, 2, 3, 4, a=1, b=2, c=3)
      
      def vp_loc_key(p1, p2, *args, **kwargs):
          print(p1, p2, args, kwargs)
      
      vp_loc_key(1, 2, 3, 4, a=1, b=2, c=3)
      

      [출력]

      (1, 2) {'a': 1, 'b': 2}
      (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
      1 2 (3, 4) {'a': 1, 'b': 2, 'c': 3}
      

      [에러]

      Positional, Keyword 방식을 섞어서 사용하거나, Keyword 방식을 먼저 정의하는 경우는 에러가 발생합니다.

      >>> vp_loc_key(1, a=1, 2, b=2)
        File "", line 1
      SyntaxError: positional argument follows keyword argument
      >>> def vp_loc_key_error(**kwargs, *args):
      ...    print(args, kwargs)
      ...
        File "", line 1
          def vp_loc_key_error(**kwargs, *args):
                                         ^
      SyntaxError: invalid syntax
      

       

       

      [참고] packing/unpacking

       

      가변인자에 사용되는 *, ** 연산자는 packing/unpacking 기능을 지원합니다.

      가변인자에는 packing 기능이 활용된 것이고, (여러개의 parameter -> 하나의 컨테이너(list/dict 형태)로 변환)

      unpacking 기능에 대해서도 간단히 알아보겠습니다. (하나의 컨테이너(list/dict/tuple/...) -> 여러개의 parameter 형태로 변환)

       

      아래는 함수 호출시 unpacking 기능을 활용한 예제입니다.

      tuple, dict 를 별도 처리 없이 함수의 인자로 바로 활용했습니다.

      [코드]

      def unpacking_func(a, b, c, d):
          print(a, b, c, d)
      
      input_tuple = (10, 11, 12)
      unpacking_func(1, *input_tuple)
      
      input_dict = {'b':10, 'c':11, 'd':12}
      unpacking_func(1, **input_dict)

      [출력]

      1 10 11 12
      1 10 11 12

       

      감사합니다.

       

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      엘티엘 님의 최신 블로그

      더보기
      동영상 기고하기