Python Basics - More complex Function Parameters

jhwang·2022년 4월 30일
0

14-1. Variable Arguments(가변인자)

  • *args
  • Variable Arguments는 Tuple로 변환되어 함수에 전달
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
    print("name : {0}\tage : {1}\t".format(name, age), end=" ")
    # end = " " 는 프린트문이 끝날 때 줄바꿈을 하지않고, 이어서 밑에 있는 문장을 출력한다.
    print(lang1, lang2, lang3, lang4, lang5)

profile("jay", 20, "Python", "Java", "C", "C++", "C#")
profile("chris", 25, "Kotlin", "Swift", "", "", "")

# name : jay      age : 20         Python Java C C++ C#
# name : chris    age : 25         Kotlin Swift   

하지만,
만약에 빈값이 있을 때, 매번 빈값("")을 넣어줘야한다.
혹은 jay가 할줄 아는 언어가 추가된다면? (함수를 바꿔줘야하는 상황...)
함수를 바꾸지 않고, 이럴때 쓸 수 있는 것이 "가변인자"

def profile(name, age, *language):
    print("name : {0}\tage : {1}\t".format(name, age), end=" ")
    for lang in language:
        print(lang, end=" ")
    print()

profile("jay", 20, "Python", "Java", "C", "C++", "C#", "JavaScript")
profile("chris", 25, "Kotlin", "Swift")

# name : jay      age : 20         Python Java C C++ C# JavaScript 
# name : chris    age : 25         Kotlin Swift 

14-2. Keyworded variable length of arguments

  • **kwargs
  • keyword arguments 인데 그 수가 정해지지 않고 유동적으로 변할 수 있는 keyword arguments

📌 <keyword arguments vs keyworded variable arguments>

  • argument 수를 0부터 N까지 유동적으로 넘겨줄 수 있음
  • keyword를 유동적으로 사용가능
  • keyworded variable arguments는 dictionary 형태로 지정
def buy_A_car(**kwargs):
    print(f"다음 사양의 자동차를 구입하십니다:")

    for option in kwargs:
        print(f"{option} : {kwargs[option]}")
        
        
> 호출 시
buy_A_car(seat="가죽", blackbox="최신", tint="yes")

>> kwarg parameter는 아래와 같은 dict로 함수에 전달
{'seat': '가죽', 'blackbox': '최신', 'tint': 'yes'}

>>>그리고는 함수 안에서 dict사용하듯이 사용하면 됨

14-3. Mixing args and kwargs

  • Variable argumentskeyworded variable arguments 둘다 사용하여 함수를 정의 가능
def do_something(*args, **kwargs):
     ## some code here...
     ....

📌 Why both args and kwargs are used at a time?

  • 둘다 사용하면 어떠한 형태와 수의 argument도 허용 가능한 함수가 됨
  • parameter에 있어서 굉장히 유동적인 함수가 됨
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()

14-4. Conclusion

  • 함수의 Parameter 순서:

    	일반 변수, *변수, **변수
  • *변수 :: 여러개가 argument로 들어올 때, 함수내부에서 해당 변수를 Tuple로 처리

  • **변수 :: 키와 값으로 가져오는 dict로 처리

profile
"Your goals, Minus your doubts, Equal your reality"

0개의 댓글