*args
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
**kwargs
keyword arguments
인데 그 수가 정해지지 않고 유동적으로 변할 수 있는 keyword arguments📌 <keyword arguments
vs 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사용하듯이 사용하면 됨
Variable arguments
와 keyworded variable arguments
둘다 사용하여 함수를 정의 가능def do_something(*args, **kwargs):
## some code here...
....
📌 Why both args and kwargs are used at a time?
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()
함수의 Parameter 순서:
일반 변수, *변수, **변수
*변수
:: 여러개가 argument로 들어올 때, 함수내부에서 해당 변수를 Tuple
로 처리
**변수
:: 키와 값으로 가져오는 dict
로 처리