Python 사용자 정의 함수
사용자 정의 함수
- 사용자 정의 함수란 사용자가 특정 작업을 수행하기 위해 직접 작성한 함수를 의미한다. 파이썬에는 많은 내장 함수들이 있지만, 때로는 우리의 요구사항에 맞게 동작하는 함수를 직접 만들어야 할 때가 있다. 이때 사용자 정의 함수를 작성한다.
- 매개변수와 반환값이 없는 함수
반환값은 함수가 호출된 곳에 함수의 기능을 수행하고 결과 값을 돌려주는 것이다. 하지만 위 이미지는 함수가 기능을 수행하지만 값을 돌려주는 것은 없다. 반환값이 있으려면 return 명령을 사용해야 한다.
- 매개변수가 있고 반환값이 없는 함수
return 명령을 사용하지 않았기에 반환값은 없지만 매개변수는 존재한다. 만약 인수값를 전달하지 않을 경우에는 에러가 발생한다.
- 반환값이 있는 함수
첫 번째 함수는 반환값은 있고 매개변수는 없다. 두 번째 함수는 매개변수도 있고, 반환값도 있는 함수이다. 만약 매개변수에 인수값 전달 개수가 맞지 않으면 에러가 발생한다. print(num1, num2) 이런 식으로는 확인할 수 없고, 함수를 호출해야 한다.
- 기본값이 설정된 매개변수
위에 말했듯이 매개변수에 전달하는 인수값의 개수가 맞지 않으면 에러가 나지만, 매개변수의 기본값을 설정하면 에러가 나지 않는다. 물론 매개변수 개수보다 전달하는 인수값의 개수가 더 많으면 안 된다.
- 가변 매개변수
- 함수를 호출할 때 *를 사용하면 시퀀스(리스트, 튜플 등)의 요소를 개별적인 위치 인자로 풀어서 전달할 수 있다.
- 키워드 매개변수
특정 키워드에 맞춰 매개변수에 인자값을 보내줄 수 있다.
- 여러개의 반환값
return 명령을 설정하면 여러 개의 반환값을 받는 것이 가능하다.
None
- None은 아무런 값이 없음을 표현하는 데 사용한다. 다른 언어에서의 null 또는 nil과 유사한 개념이다.
- None은 파이썬의 내장 상수이며, 그 자체로 데이터 타입이 NoneType이다. 모든 None으 동일하므로, 두 개의 None 값을 비교할 때 항상 True를 반환한다. None을 검사할 때 "=="보다 is를 사용하는 것이 좋다.
- 초기값 설정 : 변수를 초기화할 때 아무런 값이 할당되지 않았음을 나타낸다.
- 함수의 반환값 : 특정 조건에서 아무런 값도 반환하지 않을 때 사용한다. 함수에서는 return 명령이 생략되거나 없으면 기본적으로 None 반환
- 선택적 매개변수의 기본값 : 매개변수에 기본값으로 None을 할당하여 선택적으로 인자를 받을 수 있게 한다.
- 값 : None을 사용하여 값이 존재하는지 확인한다.
Python 함수와 메모리
- 함수의 정의 : 파이썬에서 함수는 객체로 취급한다. 따라서 함수는 메모리 상에 적재되며, 함수의 이름으로 객체를 참조하게 된다.
- 변수 할당 : 함수를 변수에 할당하면 그 변수는 본래 함수 객체를 참조한다.
- 참조 카운트 : 파이썬의 메모리 관리는 주로 참조 카운팅(reference counting)에 기반한다. 객체를 참조하는 요소의 수를 세고, 카운트가 0이면 객체는 메모리에서 제거될 수 있다.
- Garbage Collection : 참조 카운드가 0인 객체들은 바로 제거되지 않고 가비지 컬렉터(garbage collector)가 주기적으로 찾아서 메모리에서 제거한다.
- 함수의 경우 : 함수도 파이썬 객체이므로 참조 카운팅과 가비지 컬렉션의 원칙에 따라 동작한다.
- 명시적 제거 : del 명령어를 사용하여 함수에 대한 참조를 명시적으로 제거할 수 있다. 하지만 메모리에서 즉시 제거된다고 할 수는 없다.
- 종료 시 : 파이썬 프로그램을 종료할 때 모든 메모리(함수와 관련된 메모리 포함)는 OS로 반환된다.