[Python] More Complex Funtion Parameters

김영환·2021년 1월 21일
0

Python

목록 보기
6/11
post-thumbnail

Handling unknown number of arguments

만약에 A라는 자동차의 옵션 사항이 40개정도 되다고 가정하면 A라는 자동차를 구입하는 함수를 구현한다고 했을때, 모든 옵션 사항을 parameter로 받으려면 parameter의 수가 40개가 된다. 따라서 함수의 정의도 그만큼 늘어 날것이다.

def buy_A_car(options):
	print(f"다음 사양의 자동차를 구입: ")  
    for option in options:
    	print(f"{option} : {options[option]}")
options = {"seat" : "가죽", "blackbox" : "최선"  ....}

>> 다음 사양의 자동차를 구입: 
>> seat : 가죽
>> blackbox : 최신

사전에 정확히 필요한 parameter 수와 구조를 알수 없는 경우는 이런식으로 Dictionary 를 parameter로 받아서 사용하는 것이다.

하지만... 위에 같은 경우는 항상 parameter를 dictionary형태로만 받아야하는 제한이 있습니다. 떄로는 parameter를 다른 type으로 int 나 string 으로 받아야할때, 오류가 발생할수 있습니다. 그럴때 사용하는 parameter가 keyworded variables length of arguments 입니다.

Keyworded Variables length of arguments

keyword arguments 는 parameter 앞에 ** 로 시작하고,
함수를 호출할때 일반적인 Keyword arguments 처럼 'key'='value' 사용하면된다.
주로 keyworded variable length of arguments를 사용할때는 argument 이름은 kwargs 라고 짓습니다. 그래서 대부분 **kwargs 라고 parameter 이름을 정합니다.

## Keyworded Variables length of arguments example
def buy_A_car(**kwargs):
    print(f"다음 사양의 자동차를 구입하십니다:")

    for option in kwargs:
        print(f"{option} : {kwargs[option]}")

buy_A_car(seat="가죽", blackbox="최신", tint="yes")
# >> {'seat': '가죽', 'blackbox': '최신', 'tint': 'yes'}

Non-keyworded variable length of arguments

keyworded variable length of arguments와 동일하지만 keyword를 사용하지 않고 순서대로 값을 전달하는 방식

Non-keyword variable length of arguments 혹은 그냥 variable length of arguments 라고 한다. 더 간단하게 variable arguments 라고 하기도 한다.

Variable arguements를 선언하는 방법은 *args 별표 1개를 사용해서 선언한다
그리고 variable arguements는 tuple로 변환되어 함수에 전달된다.

Mixing args and kwargs

Variable argments 와 keyworded variable arguments 둘다 사용하여 함수를 정의 할 수 도 있다.
둘다 사용하면 어떠한 형태와 수의 argument도 허용 가능한 함수가 된다.
즉, parameter에 있어서 굉장히 유동적인 함수가 되는것이다.

## Mixing args and kwargs example
def do_something(*args, **kwargs):
     ## some code here...
do_something(1, 2, 3, name="정우성", age=45)
do_something(1, 2, 3, 4, 5, "hello", {"주소" : "서울", "국가" : "한국"})
do_something(name="정우성", gender="남", height="187")
do_something(1)
do_something()

0개의 댓글