퐈니썬's LIfe - 잘 실패하자 RSS 태그 관리 글쓰기 방명록
함수변수받기 (1)
2022-03-11 17:01:26
728x90
반응형

Introduction

파이썬을 처음 접했을 때, 무슨 뜻인지 몰라 헤매던 적이 있던 내용을 차근차근 정리하고자 합니다. 

파이썬 라이브러리 코드를 보다가 함수의 인자에 작성된 내용을 보고 당황했던 적 있습니다. 

# a function
func(*args, **kwargs)

어떤 의미인지 차근차근 알아가보겠습니다. 

 

 

*args, 위치인자

아래와 같은 함수가 있다고 해봅시다. 

def sum_val(a, b):
	return a+b

이 함수는 a, b  두 가지 인자를 입력으로 받아 합을 내는 함수입니다.

하지만, 이 함수를 사용하는 사용자는 두 변수 이상을 입력하여 합을 도출하고 싶습니다.

 

이 함수는 적절하지 못하기 때문에 아래와 같은 함수를 만들어 볼 수 있습니다. 

def sum_val_list(value_list):
	answer = 0
    for val in value_list:
    	answer += val
    return answer

 

위 함수는 입력에 여러 가지 변수를 넣어 합을 도출할 수 있으나, 입력 인자가 반드시 "리스트 형" 이여야 합니다. 즉, 이 함수를 사용하는 사용자는 "리스트"를 구성하여 입력해주어야 합니다. 

 

이런 경우 *args를 사용하여 해결할 수 있습니다. 

def sum_val_args(*args):
	answer = 0
    #*args를 통해 받은 인자를 리스트형으로 받아 냅니다. 
    for val in args:    
    	answer += val
    return answer

 

*args는 함수 내에서 args로 리스트형을 받아내기 때문에 위치 인자를 저장합니다. 리스트로 하나하나 받아내기 때문에 위치인자를 받기 위해 사용되는 것이죠.

 

*args 적용 전에는 사용자가 아래와 같이 사용해야 했습니다. 

sum_val_list([1,2,4])

*args를 적용한 함수는 아래와 같이 사용이 가능합니다. 

sum_val_args(1,2,4)

 

위치 인자와 키워드 인자???

function(1, 2, a=3, b=4)

위와 같은 함수가 있을 때, 1과 2는 위치 인자이며 a, b는 키워드 인자로 값을 받는 함수입니다. 
이때, 반드시 위치 인자와 키워드인자는 위치인자 다음에 키워드 인자가 와야 합니다.

 

 

**kwargs 키워드 인자

이번엔 **kwargs를 이해하기 위해서는 또 다른 예시의 함수를 정의해보겠습니다. 

def print_keyword(name, university):
	print("name: ", name)
	print("university: ", university)

위 함수는 name, university라는 변수를 받아 출력합니다. 하지만, 사용자가 새로운 파라미터를 추가하고 싶다면, 이 함수를 바꾸어야 할 것입니다. 굉장히 번거로운 일이 될 것입니다. 

 

그래서 "딕셔너리 형"을 이용해서 아래와 같은 함수를 만들 수 있을 것입니다.

def print_keyword_dict(dictionary):
	for key in dictionary:
    	print(key + ": " + dictionary[key])

위 함수는 dictionary를 받아서, key를 통해 해당 값을 출력할 수 있기 때문에 dictionary에 새로운 파라미터를 추가하여 출력할 수 있습니다. 하지만, "딕셔너리 형"을 구성해야 한다는 불편한 점이 있습니다.

 

이런 경우 **kwargs를 사용하여 해결할 수 있습니다. 

def print_keyword_kwargs(**kwargs):
	for key in kwargs:
    	print(key + ": " + kwargs[key])

**kwargs는 함수 내에서 kwargs로 딕셔너리 형을 받아내기 때문에 키워드 인자를 저장합니다.

 

 

# **kwargs 적용 전 함수
print_keyword_dict({"name":"jaehwan", "university":"seoul", "studentID":"123155"})

# **kwargs 적용 후 함수
print_keyword_kwargs(name="jaehwan", university="seoul", studentID="123155")

 

훨씬 깔끔하고, 사용하기 편한 함수가 된 거 같습니다. 

 

 

 

요약

  • 함수에 위치 인자를 받고 싶을 때! -> *args 사용! 리스트형으로 받아내기 때문에 위치(순서)대로 받아 처리!
  • 함수에 키워드 인자를 받고 싶을 때! -> **kwargs 사용! 딕셔너리형으로 받아내기 때문에 키워드에 따라 값을 받아 처리!

 

https://www.geeksforgeeks.org/args-kwargs-python/

 

*args and **kwargs in Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

728x90
반응형

'Programming > Python' 카테고리의 다른 글

파이썬 f-string  (0) 2021.12.31
파이썬 모듈이란? 패키지란?  (0) 2021.07.01
파이썬 PEP8 스타일 가이드 정리  (0) 2021.07.01
파이썬 클래스 상속  (0) 2021.06.28
numpy flip을 활용한 DICOM 이미지 반전 대칭  (0) 2021.06.25