본문 바로가기
개발일기/PYTHON [codecademy]

*args와 **kwargs (2) (Function Arguments) [Intermediate]

by 르네팜 2022. 8. 14.

지난 세 개의 게시글에서 *args와 **kwargs, 그리고 이 둘을 사용해서 함수를 만드는 것까지 보았다.

지난 내용을 확인하려면 아래 링크로 들어가면 된다.

 

앞서 본 내용에서는 *args와 **kwargs를 함수 parameter(매개 변수)로 사용해서 길이가 정해지지 않은 인자를 받도록 함수를 설정했다. 하지만 첫 게시물 *args에서 언급했듯이, args의 원래 기능은 unpacking(풀어헤치기)라는 것!

 

그래서 함수 밖에서 이미 설정해 놓은 변수를 *이나 **을 사용해서 일일이 풀어쓸 필요 없이 변수 이름 그대로 함수에 활용할 수 있다.

예를 들어, parameter 3개의 값을 모두 더해주는 함수

def sum(num1, num2, num3):
	print(num1 + num2 + num3)

 

가 있을 때, 함수를 사용하기 위해서는 변수 3개를 모두 입력해야 한다.

그래서 함수 밖에 있는 다음과 같은 dictionary의 값을 더하려면

numbers = {'num1':3, 'num2':6, 'num3':9}

 

다음과 같이 사전 안의 값을 각각 따로 넣어줘야하는 번거로움이 생긴다.

sum(numbers['num1'], numbers['num2'], numbers['num3']) #output: 18

 

하지만 **을 사용하면 다음과 같이 간단하게 입력이 가능하다.

sum(**numbers) #output: 18

 

주의할 점 단 한 가지는 필요한 매개 변수의 수와 argument안의 인자 수가 같아야 한다는 것!

 

 

built-in function에서도 또한 사용할 수 있다.

start_and_stop = [3, 6]
 
range_values = range(*start_and_stop)
print(list(range_values))

#output: [3, 4, 5]

 

 

 


연습문제

# Checkpoint 1
def calculate_price_per_person(total, tip, split):
  total_tip = total * (tip/100)
  split_price = (total + total_tip) / split
  print(split_price)

 

code:

# Checkpoint 2
table_7_total = [534.50, 20.0, 5]
# Checkpoint 3
calculate_price_per_person(*table_7_total)

 

output:

128.28

댓글