Corgi Dog Bark

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Efficient Python 23. 키워드 인자 사용법
    뜯고 또 뜯어보는 컴퓨터/파이썬 (Python) 2021. 7. 30. 01:28
    반응형

    - 다음과 같은 함수를 살펴보자.

    def remainder(number, divisor):
        return number % divisor
    
    assert remainder(20, 7) == 6
    
    # remainder(20,7)
    # remainder(20, divisor= 7)
    # remainder(number= 20, divisor = 7)
    # remainder(divisor= 7, number= 20)

    - 파이썬에서는 함수에 값을 넘길때, 밑의 4가지 경우와 같이 키워드를 선택해서 넘길 수 있는데, 이를 파이썬의 키워드인자라 한다.(뭐지... 답을 말해주고 답이라 하는 느낌이다.. ㅎㅎ)

     

    - 키워드 인자의 규칙에는 다음과 같은 규칙성이 존재한다.

    • 위치 기반 인자를 사용하려면 키워드 인자보다 앞에 지정해야 한다, 즉 number = 20, 7 과 같은 인자를 넘길 수 없다.
    • 딕셔너리의 내용물을 사용해 remainder와 같은 함수를 호출하고 싶다면, **연산자 를 사용할 수 있다. -> 각 값에 대응하는 키값과 value 가 존재해야 한다.
    • 다음의 예시를 보자,
    my_kwargs = {
        "number":20,
        "divisor":7
    }
    assert remainder(**my_kwargs) == 6
    # 다음과 같이 키워드 인자와 섞어 쓸 수도 있지만, 중복되는 값들이 없어야 한다,
    my_kwargs = {
        "divisor":7,
    }
    assert remainder(number = 20, **my_kwargs) == 6
    # **인지를 여러번 사용할 수도 있지만, 딕셔너리에 겹치는 키가 없어야 한다.
    my_kwargs = {
        "number":20,
    }
    other_kwargs = {
        "divisor":7
    }
    assert remainder(**my_kwargs,**other_kwargs) == 6
    # ** 인자는 아무값이나 받은 dict 파라미터를 받도록 사용할 수 있다.
    def print_parameters(**kwargs):
        for key,value in kwargs.items():
            print(f"{key} = {value}")
    print_parameters(alpha=1.5, beta=9, 감마=4)
    더보기

    alpha = 1.5

    beta = 9

    감마 = 4

     

     

    키워드 인자의 장점 세가지

    1. 처음 보는 사람들에게 함수 호출의 의미를 정확하게 알려 줄 수 있다.
      • remainder(number = 20, divisor = 7) 처럼 친절하게 함수의 의미에 대해 알려줄 수 있다.
    2. 키워드 인자의 경우 default 값 지정 가능.
      • def remainder(number = 7):
    3. 어떤 함수를 사용하던 기존 호출자에게는 하위 호환성(backward compatibility)를 제공하면서 함수 파라미터를 확장할 수 있는 방법을 제공해준다, 쉬운 예를 들어. default 값을 호출하여, 기존의 함수를 변환하지 않고, 새로운 함수를 사용가능하다. (밑의 예제 참고.)
    def flow_rate(weight_diff, time_diff, period):
        return (weight_diff / time_diff) * period   #---> 시간당 유입량을 계산하는 함수
    
    # 만약 단위가 바뀌어 킬로그램이 아닌 무게 단위를 사용해 시간당 유입량을 계산하게 된다면,(ex pound 단위를 사용)
    # 비율을 제공하는 새로운 선택적 파라미터 추가
    
    def flow_rate(weight_diff, time_diff, period, conversion_rate = 1):
        return ((weight_diff+conversion_rate) / time_diff) * period    #_----> 기존 함수를 크게 바꾸지 않고, 새로운 인자를 받는 함수 완성.
    반응형

    댓글

Designed by Tistory.