ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] day21. 함수에서 위치 인수와 키워드 인수 사용하기
    IT/파이썬 2020. 9. 12. 16:36

    출처 : unsplash

    ■ 들어가기

    - 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그


    ▶ Unit30. 함수에서 위치 인수와 키워드 인수 사용하기

         - 30.1 위치 인수와 리스트 언패킹 사용하기

         - 30.2 키워드 인수 사용하기

         - 30.3 키워드 인수와 딕셔너리 언패킹 사용하기

         - 30.4 매개변수에 초깃값 지정하기

     

    >> 30.1 위치 인수와 리스트 언패킹 사용하기 <<

    - 함수에 인수(argument)를 순서대로 넣는 방식을 위치 인수(positional argument)라고 부름

    - 인수의 위치가 고정

     

    1. 위치 인수를 사용하는 함수를 만들고 호출하기

    - 10, 20, 30의 순서대로 값을 넣고 10, 20, 30의 순서대로 출력

    >>> def print_numbers(a, b, c) :
    print(a)
    print(b)
    print(c)

    >>> print_numbers(10, 20, 30)
    10
    20
    30

     

    2. 언패킹 사용하기

    - 인수를 순서대로 넣을 때는 리스트나 튜플 사용 가능하며

    - 리스트 또는 튜플 앞에 *를 붙여서 함수에 넣어주면 됨

    - 사용법

    함수(*리스트)

    함수(*튜플)

    - 주의! 함수의 매개변수 개수와 리스트/튜플의 요소 개수는 동일해야 함! (그렇지 않은 경우 에러!)

    >>> x = [10, 20, 30]
    >>> print_numbers(*x)
    10
    20
    30
    >>> type(x)
    <class 'list'>

    출처 : 파이썬 코딩 도장 (dojang.io)

     

    3. 가변 인수 함수 만들기

    - 위치 인수와 리스트 언패킹은 언제 사용할까?

    - 인수의 개수가 정해지지 않은 가변 인수(variable argument)에 사용

    - 가변 인수 함수는 매개변수 앞에 *를 붙여서 만듦

    - 가변 인수 함수 사용법

    def 함수이름(*매개변수) :

        코드

    - 함수의 매개변수는 튜플

    >>> def print_numbers(*args) :
                for arg in args :
                          print(arg)
    >>> print_numbers(10)
    10
    >>> print_numbers(10, 20, 30, 40)   # 매개변수 넣은 만큼 출력됨
    10
    20
    30
    40

    - 함수에 인수 여러 개를 "직접" 넣는 방법 외에 리스트(튜플) 언패킹 방법 사용

    >>> x = [10]
    >>> print_numbers(*x)   # print_numbers(10)와 동일
    10
    >>> y = [10, 20, 30, 40]
    >>> print_numbers(*y)   # print_numbers(10, 20, 30, 40)과 동일
    10
    20
    30
    40

    - 고정 인수와 가변 인수를 함께 사용하는 경우, 고정 매개변수를 먼저 지정하고 그 다음에 매개변수 앞에 *를 지정


    >> 30.2 키워드 인수 사용하기 <<

    - 함수 호출 시 지정된 인수를 넣는 방법 외에 인수의 순서와 용도를 매번 기억하지 않도록 키워드 인수(keyword argument)라는 기능을 제공함

    - 키워드 인수 : 인수에 이름(키워드)을 붙이는 기능으로 키워드=값 형식으로 사용

    - 사용법: 함수(키워드=값)

    >>> def personal_info(name, age, address) :   # 함수 define
    print('이름: ', name)
    print('나이: ', age)
    print('주소: ', address)


    >>> personal_info('홍길동', 30, '서울시 용산구 이촌동')   # define된 순서대로 인수를 전달
    이름:  홍길동
    나이:  30
    주소:  서울시 용산구 이촌동
    >>> personal_info(30, '서울시 용산구 이촌동', '홍길동')   # 인수를 잘못 넘긴 경우 엉뚱한 값이 도출됨
    이름:  30
    나이:  서울시 용산구 이촌동
    주소:  홍길동
    >>>  
    >>>  # 키워드=값 형식으로 순서지키지 않아도 정상 할당됨
    >>> personal_info(name='홍길동', address='서울시 용산구 이촌동', age=30)   
    이름:  홍길동
    나이:  30
    주소:  서울시 용산구 이촌동

    >> 30.3 키워드 인수와 딕셔너리 언패킹 사용하기 <<

    - 딕셔너리?? : {}(중괄호) 안에 키:값 형식으로 저장하고 각 키와 값은 ,(콤마)로 구분 (더보기)

    - 키워드 인수로 딕셔너리 언패킹 사용가능하고 딕셔너리 앞에 **를 붙여서 함수에 넣어줌

    - 사용법 : 함수(**딕셔너리)

    - 주의! 딕셔너리의 키(키워드)는 반드시 문자열 형태여야 함!

    >>> def personal_info(name, age, address) :
    print('이름: ', name)
    print('나이: ', age)
    print('주소: ', address)

    >>> x = {'name':'홍길동', 'age':30, 'address':'서울시 용산구 이촌동'}
    >>> personal_info(**x)
    이름:  홍길동
    나이:  30
    주소:  서울시 용산구 이촌동

    출처 : 파이썬 코딩 도장 (dojang.io)

    - 딕셔너리 언패킹 시, 함수의 매개변수 이름과 딕셔너리의 키 이름이 같아야 하며 

    - 함수의 매개변수 개수와 딕셔너리의 키 개수도 같아야 함 (이름과 개수가 다르면 함수 호출 불가)

     

    1. **를 두 번 사용하는 이유

    - *를 한 번만 사용해서 함수 호출

    - 딕셔너리 x의 키가 함수의 매개변수에 맵핑되어 출력됨

    - 즉, 딕셔너리를 한 번 언패킹하면 키를 사용한다는 의미!

    >>> x = {'name':'홍길동', 'age':30, 'address':'서울시 용산구 이촌동'}
    >>> personal_info(*x)
    이름:  name
    나이:  age
    주소:  address

    - *를 두 번 사용해서 함수 호출

    - 딕셔너리의 키의 값을 사용한다는 의미!

    >>> personal_info(**x)
    이름:  홍길동
    나이:  30
    주소:  서울시 용산구 이촌동

     

    2. 키워드 인수를 사용하는 가변 인수 함수 만들기

    - 키워드 인수를 사용하는 가변 인수 함수는 매겨변수 앞에 **를 붙여서 생성

    - 사용법

    def 함수이름(**매개변수) :

        코드

    - 함수의 매개변수는 딕셔너리

    >>>  # 인수를 직접 입력
    >>> def personal_info(**kwargs) :
                for kw, arg in kwargs.items() :
                          print(kw, ': ', arg, sep='')

    >>> personal_info(name='홍길동')
    name: 홍길동
    >>> personal_info(name='홍길동', age=30, address='서울시 용산구 이촌동')
    name: 홍길동
    age: 30
    address: 서울시 용산구 이촌동

    - **kwargs는 딕셔너리이며 키:값의 형태로 반환하기 때문에 for 반복문 사용시 키, 값을 저장하기 위한 변수 2개를 지정함

    >>> def personal_info(**kwargs) :
                print(kwargs.items())

    >>> personal_info(name='홍길동')
    dict_items([('name', '홍길동')])

    - 딕셔너리 언패킹 사용

    >>> def personal_info(**kwargs) :
                for kw, arg in kwargs.items() :
                          print(kw, ': ', arg, sep='')
    >>> x = {'name': '홍길동'}
    >>> personal_info(**x)
    name: 홍길동
    >>> y = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
    >>> personal_info(**y)
    name: 홍길동
    age: 30
    address: 서울시 용산구 이촌동

    - 일반적으로 **kwargs를 사용한 가변 인수 함수는 함수 안에서 딕셔너리 안에 특정 키가 있는지 확인 후 기능 생성


    >> 30.4 매개변수에 초깃값 지정하기 <<

    - 함수 호출할 때 인수를 넣지 않더라도 초깃값을 설정하면 해당 초깃값으로 처리 가능

    - 사용법

    def 함수이름(매개변수 = 값) :

        코드

    - 초깃값이 설정되어 있어도 다른 인자를 전달하면 해당 인자값으로 설정됨

    >>> def personal_info(name, age, address='비공개') :
    print('이름: ', name)
    print('나이: ', age)
    print('주소: ', address)


    >>> personal_info('홍길동', 30)
    이름:  홍길동
    나이:  30
    주소:  비공개
    >>> personal_info('홍길동', 30, '서울시 용산구 이촌동')
    이름:  홍길동
    나이:  30
    주소:  서울시 용산구 이촌동

     

    1. 초깃값이 지정된 매개변수의 위치

    - 초깃값이 지정된 매개변수 다음에는 초깃값이 없는 매개변수가 올 수 없음

    - 즉, 초깃값이 지정된 매개변수는 항상 맨 마지막에 위치해야 함!

     

     

     

     

    ● 요약

    1. 언패킹 : 리스트나 튜플, 딕셔너리의 값을 함수의 매개변수로 지정할 수 있음

    2. *는 리스트/튜플, **는 딕셔너리 에 사용

    댓글

Designed by Tistory.