함수 Parameter, Argument

bong·2022년 4월 26일

Python

목록 보기
3/9

Parameter vs Argument

  • parameter : 매개변수. 입력으로 전달된 값을 받는 변수
  • argument : 인수, 인자. 호출시 전달되는 입력값
def add_func(a, b): # a, b : parameters
	return a + b

print(add_func(3,7)) # 3, 7 : arguments


Parameter

1. 매개변수 지정해서 호출

  • 인자 값이 담길 매개변수를 지정해서 호출할 수 있음
  • 순서 상관 X
def add_func(a, b):
	return a + b

res = add_func(a = 3, b = 7)
res = add_func(b = 5, a = 4)

2. 매개변수 초기값 설정

  • 함수 선언 시 매개변수 초기값 설정 가능
  • 초기값 설정한 매개변수는 초기값 없는 매개변수보다 반드시 뒤에 위치
    • 선언, 호출 둘다 해당
    • 그렇지 않으면 에러 발생
def func(a, b, is_add = True, msg = "hi"):
    print(msg)
    return a + b if is_add else a - b

a, b = 3, 5
res = func(a, b)
res = func(a, b, False)
res = func(a, b, False, "hello")
res = func(a, b, msg = "hello")
res = func(a, msg = "hello", b) # 에러 발생

3. 입력 여러개 받기

  • 매개변수에 *을 붙여서 여러개(정해지지 않은)의 인자를 받을 수 있음
  • 별 1개
    • *args (arguments) : 여러개의 인자를 tuple 형태로 묶어서 전달
  • 별 2개
    • **kwargs (keyword arguments) : dictionary 형태로 전달
def avg(num, *args):
	return sum(args)/num

res = avg(5,1,2,3,4,5) # 1,2,3,4,5 의 평균


def personal_info(**kwargs):
	print(kwargs)
    
personal_info(name = "tom", age = 25, gender = "male", alive = True)

주의! *args와 같은 인자를 여러개 받기 위한 매개변수는 일반 매개변수보다 뒤에 위치해야 한다.
그렇지 않으면, *args가 일반 매개변수까지 다 먹어버린다.


번외. 초기값 설정 + 여러개 받기?

  • 초기값 설정과 여러개 받기는 동시에 가능할까?
def grade(name, retake=False, *args): # 초기값 설정 매개변수 먼저
    res = f"{name} : {sum(args)/len(args)}"
    res = res + "(Retake)" if retake else res
    print(res)

grade("tom", True, 1, 2, 3, 4, 5)	# 의도한대로 동작
grade("tom", 1, 2, 3, 4, 5)			# retake에 1이 들어가버림


def grade(name, *args, retake=False): # 여러개 받기 매개변수 먼저
    res = f"{name} : {sum(args)/len(args)}"
    res = res + "(Retake)" if retake else res
    print(res)
    
grade("tom", 1, 2, 3, 4, 5)					# 의도한대로 동작
grade("tom", 1, 2, 3, 4, 5, True)			# args에 True까지 들어가버림
grade("tom", 1, 2, 3, 4, 5, retake = True)	# 의도한대로 동작

0개의 댓글