개발기록장

[Python] Argument 설정에 따른 함수 호출과 default value parameter 본문

TIL/Python

[Python] Argument 설정에 따른 함수 호출과 default value parameter

yangahh 2021. 1. 14. 17:08

 

 

** 파라미터와 인수

우선 많이 혼용해서 사용되는 파라미터와 인수를 확실히 구분해보자.

파라미터(pameter, 매개변수)와 인수(arugment)는 같은 의미지만 사용해야하는 때가 다르다.

파라미터는 함수를 정의할 때 함수에 입력으로 전달된 값을 받는 변수를 의미하고

인수는 함수를 호출할 때 전달하는 입력값을 의미한다.


def add(a, b):  # a, b는 파라미터(=parameter, 매개변수)
	return a + b
    
print(add(10, 20))  # 10, 20은 인수(=argument)

 


 

 

1. Argument 설정에 따른 함수 호출

- 일반적인 함수 호출 (Positional Arguments)

일반적인 함수 호출은 함수 호출 시 함수에 정의된 파라미터의 순서대로 인수를 입력해주면 된다.


def func(name, age):
	print(f"안녕하세요. 제 이름은 {name}이고, {age}살 입니다.")
    
func("철수", 10)  # 결과 : 

# 결과
>> 안녕하세요. 제 이름은 철수이고, 10살 입니다.

# func 함수의 첫번째 파라미터인 name에 "철수"가 들어가게 되고, 두번째 파라미터인 age에 10이 들어간다
# 함수를 호출할 때 인수의 위치 그대로 파라미터에 전달됨을 알 수 있다.

 

 

- Keyword Aruguments

위의 경우처럼 순서에 맞춰서 파라미터 값을 전달해주지 않고, 파라미터 이름을 지정해서 인수를 넘겨줄 수도 있다.

이를 keyword arguments라고 한다. 이 방식을 사용하면 인수를 입력하는 위치가 파라미터 위치와 달라도 된다.


def func(name, age):
	print(f"안녕하세요. 제 이름은 {name}이고, {age}살 입니다.")
    
func(age = 10, name = "철수")

# 결과
>> 안녕하세요. 제 이름은 철수이고, 10살 입니다.

# 인수를 파라미터의 순서와 관계 없이 파라미터 이름을 지정하여 전달해 줄 수 있다.

 

 

- Mixing (Positional + Keyword Aruguments) 

위 두 가지 방법을 혼용해서 사용하는 것도 가능하다.

다만, positional arguments 부분은 순서를 지켜줘야 한다. (keyword arguments는 순서가 바뀌어도 상관 없음)

 

에러가 나는 예시 )


def func(greeting, name, age):
	print(f"{greeting} 제 이름은 {name}이고, {age}살 입니다.")
    
func(age=10, "Hello", "철수")


# 결과
>>   File "test.py", line 5
    func(age=10, "Hello", "철수")
                                  ^
SyntaxError: positional argument follows keyword argument

 

에러가 나는 이유는 keyword argument가 positional argument보다 앞에 위치된 상태로 함수가 호출되었기 때문이다.

positional arguments는 파라미터와 순서를 일치시켜줘야하는데, keyword argument가 이 순서에 영향을 줘서 에러가 난 것이다.

 

아래의 경우는 에러가 나지 않는 경우이다.


def func(greeting, name, age):
    print(f"{greeting} 제 이름은 {name}이고, {age}살 입니다.")

func("Hello", age=10, name="철수")  

# 결과
>> Hello 제 이름은 철수이고, 10살 입니다.

# keyword argument들의 위치는 상관 없으나 positional arugment는 반드시 파라미터 위치와 일치해야함

 

 

 

 

2. Default value Parameter

- 개념 및 사용법

함수를 정의할 때 파라미터에 default 값을 설정해 줄 수도 있다. 파라미터에 미리 값을 넣어주었다는 의미이다.

이 경우, 함수 호출 시 인수를 적지 않으면 default 값에 설정된 값이 자동으로 적용된다.

 

함수의 파라미터에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해 두면 유용하다.

 

사용법 예시)


def func(greeting, name, age=10):  # age 파리미터에 default value로 10을 설정
    print(f"{greeting} 제 이름은 {name}이고, {age}살 입니다.")

func("Hello!", "철수")

# 결과
>> Hello! 제 이름은 철수이고, 10살 입니다.

# func함수 호출 시 age에 대한 값은 전달해 주지 않았지만, default값이 자동으로 적용됨을 알 수 있다.

 

- 주의사항

default value가 적용된 파라미터가 default value가 적용되지 않은 파리미터보다 앞에 위치하면 안된다.

 

 

에러가 나는 경우 )


def func(greeting, name="철수", age):
    print(f"{greeting} 제 이름은 {name}이고, {age}살 입니다.")


func("Hello!", 10)

# 결과
  File "test.py", line 1
    def func(greeting, name="철수", age):
                                         ^
SyntaxError: non-default argument follows default argument

 

위의 에러메세지를 보면 default value가 적용된 greeting 파라미터가 non-default 인 파라미터(name, age)보다 앞에 위치해 있어서 에러가 발생했다고 한다.

 

위와 같이 함수를 호출한다면 greeting 파라미터에는 "Hello"라는 값이 들어가지만,

파이썬 인터프리터는 10이라는 인수를 name과 age 파라미터 중 어느 곳에 대입해야 할지 알 수 없게 된다.

 

따라서 반드시 default value를 적용하고 싶은 파라미터는 함수 선언 시 항상 뒤쪽에 놓아야 한다.