*args 와 **kwargs

About_work·2022년 12월 31일
0

python 기초

목록 보기
1/65
  • 변수 순서 반드시 지켜야 한다.
    • 일반 변수 -> *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)) # <class 'tuple'>
    print("names: ", names) # ('messi', 'neymar', 'suarez')


# Same result with below two sentences.
lastname_and_first_name('messi', 'neymar', 'suarez')
lastname_and_first_name(*['messi', 'neymar', 'suarez']) # * = unpacking

def lastname_and_first_name2(name1, name2, name3):
    print("name1: ", name1) # messi
    print("name2: ", name2) # neymar
    print("name3: ", name3) # suarez

lastname_and_first_name2(*['messi', 'neymar', 'suarez']) # * = unpacking

**kwargs

  • keyward argument의 줄임말
  • kwargs의 type은 딕셔너리이다.
  • keyword argument가 주어지면, *kwargs에 할당된다.
def introduce_english_name(**kwargs):
    print("type(kwargs): ", type(kwargs)) # <class 'dict'>
    print("kwargs: ", kwargs) # {'Myname': 'Nelson'}
    for key, value in kwargs.items():
        print("{0} is {1}".format(key, value))

# Same result with below two sentences.
introduce_english_name(Myname='Nelson', Yourname='Messi')
introduce_english_name(**{'Myname': 'Nelson', 'Yourname': 'Messi'}) # ** = unpacking

def introduce_english_name2(Myname, Yourname):
    print("Myname: ", Myname) # Nelson
    print("Yourname: ", Yourname) # Messi

introduce_english_name2(**{'Myname': 'Nelson', 'Yourname': 'Messi'}) # ** = unpacking

* 와 ** 의 원리?

  • *와 ``는 파이썬에서 '언패킹(unpacking)' 연산자로 사용**
  • 이 연산자들은 컨테이너 타입의 데이터(예: 리스트, 튜플, 딕셔너리)를 '펼쳐서' 각각의 요소를 개별적으로 처리할 수 있게 합니다.

* 연산자

  • 위치 인자 언패킹:
    • 함수에 리스트나 튜플과 같은 시퀀스를 인자로 전달할 때 사용됩니다.
    • * 연산자는 시퀀스의 각 항목을 개별 인자로 '펼쳐서' 함수에 전달합니다.
  • 예를 들어, func(*[1, 2, 3])func(1, 2, 3)과 동일하게 작동합니다.
  • 여기서 [1, 2, 3] 리스트의 각 항목이 func 함수의 개별 인자로 전달됩니다.

** 연산자

  • 키워드 인자 언패킹:
    • 딕셔너리의 경우, ** 연산자를 사용하여 함수에 키워드 인자로 전달할 수 있습니다.
    • 이때 딕셔너리의 키는 인자의 이름으로, 값은 그 인자의 값으로 사용됩니다.
  • 예를 들어, `func({'a': 1, 'b': 2})func(a=1, b=2)`와 동일하게 작동합니다.**
  • 이러한 언패킹 연산자는 함수 호출뿐만 아니라, 리스트, 튜플, 딕셔너리 등의 컨테이너 타입 데이터를 다룰 때도 널리 사용됩니다.
  • 예를 들어, 리스트를 합치거나, 다른 컨테이너 타입으로 변환할 때 * 연산자를 사용할 수 있습니다.
  • 마찬가지로, 두 딕셔너리를 하나로 병합할 때 ** 연산자를 사용할 수 있습니다.
  • 언패킹 연산자는 코드를 더 간결하고 읽기 쉽게 만들어주며, 함수나 메서드의 인자를 유연하게 다루는 데 매우 유용합니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글