[PYTHON] Function Parameters
함수의 파라미터란?
[Python] 함수의 매개변수(parameter) 특징 - 기본값 & 가변형 매개변수
파이썬의 독특한 매개변수 parameter의 특징! <기본값 설정하기 & 가변형 매개변수> 함수의 매개변수 parameter 함수 내부에서 만든 코드에서 필요한 값을 전달해야 할 때, 이를 매개변수로 받을 수 있
ychae-leah.tistory.com
함수를 정의하는 방법
1. positional arguments
가장 기본적인 방법은 순서대로 적용하는 것
> schedule("점심밥","저녁밥")
def schedule(lunch, evening):
print(f"{lunch} and {evening}")
> schedule("점심밥","저녁밥")
2. Keyword arguments
두번째로 argument의 이름을 직접 넣어주는 방법
> schedule(lunch = "점심밥", second_class="저녁밥)
def schedule(lunch, evening):
print(f"{lunch} and {evening}")
> schedule(lunch = "점심밥", second_class="저녁밥)
3. Mixing positional arguments
세번째로 position argument와 keyword argument 혼용
> schedule("점심밥", second_class="저녁밥)
def schedule(lunch, evening):
print(f"{lunch} and {evening}")
> schedule("점심밥", second_class="저녁밥)
keyword argument 는 위치가 바뀌어도 상관이 없다. 이미 데이터 위치를 정확하게 짚고 있기때문이다.
그러나 positional argument는 순서가 곧 위치로 인식되어 있기때문에 위치가 변화한다면 밑에 와 같은 error가 뜬다.
schedule("evening" = 저녁밥, "점심밥")
>positional argument follows keyword argument
>positional argument 위치 제대로 잡으란 뜻이다.
keyword argument로 2번째 자리에 저녁밥 데이터가 자리잡고 있는 와중에
갑자기 또 2번째 자리에 점심밥 데이터가 들어갈려고 하는 상황이다.
따라서 1번째 자리는 공석이 되고 에러메세지가 뜨는 것이다.
4. Parameter Default Value
함수의 파라미터에 default 값을 정의해도 된다. default 값이 정의된다면 prameter는 값을 넘기지 않고 제자리로 가게 된다. 쉽게 말해 positional argument의 기본위치를 정의해서 무조건적으로 첫번째자리로 데이터를 위치시키는 것이다.
> schedule("점심밥")
def schedule(lunch, evening):
print(f"{lunch} and {evening}")
> schedule("점심밥")
📢 이때 주의할 점이 있다.
default 값이 정의된 파라미터는 default값이 정의되지 않는 파라미터 보다 먼저 위치하면 에러가 뜬다
무슨말일까?
def schedule(lunch="점심밥", evening):
print(f"{lunch} and {evening}")
> SyntaxError: non-default argument follows default argument
데이터 위치가 정해진 데이터가 정해지지않는 데이터보다 먼저 위치를 하게 되면 에러가 뜬다는 말이다.
def schedule(lunch="점심밥", evening , midnight_snack):
print(f"{lunch} and {evening} and {midnight}")
> schedule("저녁밥","야식")
schedule 함수의 첫번째 인자 : 저녁밥이 lunch로 가야하는데 이미 lunch에는 점심밥이 차지하고 있다.
또한 position arugument에 따라 저녁밥 야식이 이동하게 된다면 lunch, evening에 위치하고 결국엔
마지막 midnight_snack이 공석이 되기때문에 문제가 발생한다.
한마디로 파라미터 내부의 argument 중 default argument(이미 자리를 잡은 데이터)가 앞쪽에 위치한다면,
인자가 들어갈 곳이 모호해진다.
따라서 default값이 없는 값이 앞부분에 오도록 설계해야한다. 이를 토대로 본다면
해결방안 1. 야식을 마지막 데이터에 위치시킨다
def schedule(lunch, evening , midnight_snack="야식"):
print(f"{lunch} and {evening} and {midnight}")
> schedule("점심밥","저녁밥")
해결방안 2. 아침밥을 뒤로 보낸다
def schedule(lunch="점심밥", evening , midnight_snack):
print(f"{evening} and {midnight} and {lunch}")
> schedule("저녁밥","야식")