파이썬 함수개념정리

samdaso-o·2021년 7월 7일
1

python

목록 보기
13/17

함수 parameter 개념정리

우리가 함수를 작성시 보통 parameter값을 순서에 맞게 또는 이름으로 맞추어서 아니면 default값을 미리 설정을 해주어 입력받게 한다.

하지만 여기서 궁금한 점은 parameter값을 여러개 받을때 default 값이 정의되있지 않은 parameter보다 먼저 default를 정의했을시 error가 난다.

왜 그런지 검색을 해보았다.
parameter에는 받는 순서가 정해져있다고 한다. 이를 지키지 않으면 오류가 발생한다.
Regular positional args -> Default args -> Variable length positional args -> Non-default args -> Keyword-Only args with default -> Variable length kwargs**

이를 지키지않고 parameter를 무작위로 정의하면 함수는 어떤 parameter에 어떤 값을 받아야하는지 정할수 없다.

예시를 하나 들겠다.
num1에 default가 맨앞에서 정의되있고, num2,num3 parameter는 빈 인자이다.
여기서 num(1,2)를 주었을때 position parameter로 인자를 주었기 때문에 미리 default값을 받은 num1과 충돌하기 때문에 error가 난다.

여러 예시 문제들을 풀어보겠다.
ex)

위와 같이 위치인수사이에 가변인수가 자리하게 된다면 우선순위로 인해 에러가 난다.

가변인수를 맨 뒤로 옮겨주면 함수는 잘 작동된다.

다른 방법을 고민해보자면, age에 값을 할당해 함수를 호출해도 함수는 잘 작동된다. 하지만 가독성이라던지 여러가지를 고려했을때 첫번째 해결방법 같이 가변인자를 맨 뒤로 보내 우선순위를 알맞게 조절하는것이 가장 좋다.

ex-2)

위의 함수도 마찬가지로 인자의 위치 순서가 잘못되었다.
Keword-arguments가 Variable length keyword arguments뒤로 가야한다.

순서만 바꿔줬는데도 함수가 잘 작동하는것을 확인 할 수있었다.

ex-3)

위 문제는 인자값들이 서로 위치를 찾지 못해 에러가 발생한것이다.
position인자인 age를 맨 앞으로 빼고 keyword-argument인 address를 *kwargs앞으로 와야한다.

위의 설명대로 함수를 수정하니 잘 동작하는걸 확인하였다.

함수의 우선순위에 유의하며 작성, 실수하지 않는 백엔드 개발자로 거듭나야겠다.

profile
ㅎㅅㅎ

0개의 댓글