imhamburger 님의 블로그

파이썬(Python) - 디폴트 파라미터, *args, **kwargs 본문

파이썬(Python)

파이썬(Python) - 디폴트 파라미터, *args, **kwargs

imhamburger 2024. 7. 29. 17:31

파라미터값에 default를 둘 수 있으며, 보통 많이 사용하는 파라미터값을 default로 설정한다.

def gen_path(filename, path='/data/csv', home='~/my/airflow'):
	    print(f"{home}{path}/{filename}")
        
>>> gen_path('file') #입력값
>> ~/my/airflow/data/csv/file #출력값

위 코드에서 'path'와 'home'을 default값으로 각각 경로를 설정하였다.

그럼 입력할 때 이미 default 값이 설정되어 있기때문에 출력값은 입력값과 default값이 합쳐져 나온다.

 

만약 default값이 앞으로 온다면?

에러가 날 것이다. default 파라미터값은 앞에 올 수 없다.

def add(step=1, i)
  File "<stdin>", line 1
    def add(step=1, i)
                    ^
SyntaxError: non-default argument follows default argument

 

만약 어느 한 개만 default값이 아니라 다른 값으로 받고싶다면?

def gen_path(filename, path='/data/csv', home='~/my/airflow'):
	    print(f"{home}{path}/{filename}")


gen_path('abc.csv', home='home/hamsunwoo') #입력값
>> home/hamsunwoo/data/csv/abc.csv #출력값

default 파라미터를 다른값으로 지정해서 사용할 수 있다. 

 

간혹 *args와 **kwargs가 들어간 함수를 본다. *args는 Non-Keyword Arguments로 어떠한 파라미터를 넣어도 다 대응한다.

*args는 파라미터를 넣을 때마다 다 대응한다. 사실 * 한개만 붙이고 다음에 오는 글자는 내 마음대로 지정해도되지만 보통 args 단어를 쓴다.

def abc(*args):
	print(args)

 

사용예시

abc(1, 3, 4, ham) #입력값
>> 1, 3, 4, ham #출력값

 

for문과 함께 응용하여 사용할 수 있다.

def abc(*args):
	    r = 1
	    for i in args:
        	r = r + i
	    return r

 

abc(1, 2, 3, 4) #입력값
>> 2, 3, 4, 5 #출력값

 

**kwargs는 Keyword Arguments로 키워드가 있는 argument 딕셔너리이다.

def abc(**kwargs):
...     for key, value in kwargs.items():
...             print(f'{key} => {value}')

 

입력값

abc(a=1, b=2, c=3)

 

출력값

a => 1
b => 2
c => 3

 

*args와 **kwargs를 같이쓸 때는 *args가 먼저 나와야 한다. **kwargs가 먼저나오면 에러가 난다.

 

 

 

부록) 파이썬 같은 기능의 코드표현

def abc(a,b):
...     return a + b
...
>>> abc(1,2)
3
>>> def abc(a: int, b: int) -> int:
...     return a+b
...
>>> abc(1,2)
3