- 변수 순서 반드시 지켜야 한다.
- 일반 변수 ->
*args
-> **kwargs
def abc(name, *names, **keyward_names):
pass
*args
*arguments
의 줄임말
- 꼭 저 단어를 쓰지 않아도 되고, *asdfdsf 라고 써도 된다.
- 이 지시어는 복수 개의 arguments 인자를 함수로 받고자 할 때 씀
- args의 type은 tuple 형태이다.
- positional argument가 주어지면,
*args
에 할당된다.
def lastname_and_first_name(*names):
print("type(names): ", type(names))
print("names: ", names)
lastname_and_first_name('messi', 'neymar', 'suarez')
lastname_and_first_name(*['messi', 'neymar', 'suarez'])
def lastname_and_first_name2(name1, name2, name3):
print("name1: ", name1)
print("name2: ", name2)
print("name3: ", name3)
lastname_and_first_name2(*['messi', 'neymar', 'suarez'])
**kwargs
- keyward argument의 줄임말
- kwargs의 type은 딕셔너리이다.
- keyword argument가 주어지면,
*kwargs
에 할당된다.
def introduce_english_name(**kwargs):
print("type(kwargs): ", type(kwargs))
print("kwargs: ", kwargs)
for key, value in kwargs.items():
print("{0} is {1}".format(key, value))
introduce_english_name(Myname='Nelson', Yourname='Messi')
introduce_english_name(**{'Myname': 'Nelson', 'Yourname': 'Messi'})
def introduce_english_name2(Myname, Yourname):
print("Myname: ", Myname)
print("Yourname: ", Yourname)
introduce_english_name2(**{'Myname': 'Nelson', 'Yourname': 'Messi'})
* 와 ** 의 원리?
*
와 ``는 파이썬에서 '언패킹(unpacking)' 연산자로 사용**
- 이 연산자들은 컨테이너 타입의 데이터(예: 리스트, 튜플, 딕셔너리)를 '펼쳐서' 각각의 요소를 개별적으로 처리할 수 있게 합니다.
*
연산자
- 위치 인자 언패킹:
- 함수에 리스트나 튜플과 같은 시퀀스를 인자로 전달할 때 사용됩니다.
*
연산자는 시퀀스의 각 항목을 개별 인자로 '펼쳐서' 함수에 전달합니다.
- 예를 들어,
func(*[1, 2, 3])
는 func(1, 2, 3)
과 동일하게 작동합니다.
- 여기서
[1, 2, 3]
리스트의 각 항목이 func
함수의 개별 인자로 전달됩니다.
**
연산자
- 키워드 인자 언패킹:
- 딕셔너리의 경우,
**
연산자를 사용하여 함수에 키워드 인자로 전달할 수 있습니다.
- 이때 딕셔너리의 키는 인자의 이름으로, 값은 그 인자의 값으로 사용됩니다.
- 예를 들어, `func({'a': 1, 'b': 2})
는
func(a=1, b=2)`와 동일하게 작동합니다.**
- 이러한 언패킹 연산자는 함수 호출뿐만 아니라, 리스트, 튜플, 딕셔너리 등의 컨테이너 타입 데이터를 다룰 때도 널리 사용됩니다.
- 예를 들어, 리스트를 합치거나, 다른 컨테이너 타입으로 변환할 때
*
연산자를 사용할 수 있습니다.
- 마찬가지로, 두 딕셔너리를 하나로 병합할 때
**
연산자를 사용할 수 있습니다.
- 언패킹 연산자는 코드를 더 간결하고 읽기 쉽게 만들어주며, 함수나 메서드의 인자를 유연하게 다루는 데 매우 유용합니다.