I. 함수 정의 방법
머리부 | – 예약어(def)를 먼저 쓰고 함수명과 매개변수를 작성, 콜론(:)을 붙여 완성 |
몸체부 | – 함수의 기능 작성, 결과를 예약어(return)과 변환값 작성 – 아무런 기능이 없을 때도 블록 문장(pass문) 작성 |
호출 | – 함수 이름 다음 실행 연산자인 괄호를 붙여 실행 – 인자가 있으면 매개변수와 동일하게 실행 연산자 내 지정 |
- 함수 이름으로 이름 공간이 저장되고 함수 객체를 검색하므로 다른 변수나 모듈 이름과 다르게 작성
- [예제] 함수 정의
def function() : # 머리부 a = 10 # 몸체부 return a # 몸체부 func = function() # 호출 print(func, type(func)) [결과] 10 <class 'int'>
II. 도움말(help)
- 기능에 관한 설명을 문자열로 작성 시 __doc__ 속성에 문서화
- [예제] help 기능 사용
def add_(a, b) : """ 이 함수는 두 개의 매개변수를 더하는 함수 입니다. """ return a + b print(add_.__doc__) help(add_) [결과] 이 함수는 두 개의 매개변수를 더하는 함수 입니다. Help on function add_ in module __main__: add_(a, b) 이 함수는 두 개의 매개변수를 더하는 함수 입니다.
III. 함수 객체 사용
- 함수 객체를 변수에 할당
- [예제] 함수 객체를 변수에 할당
def func(a, b) : return a, b var = func print(var.__name__) [결과] func
- [예제] 함수 호출 시 인자로 전달
def func(a, b) : return a, b def func2(func, *args) : return func(*args) print(func2(func, 10, 20)) [결과] (10, 20)
- 값을 하나만 반환하므로 튜플로 처리
IV. 함수 이름으로 접근
- 함수 클래스도 디스크립터이므로 디스크립터 클래스로 객체를 만들어 변수에 할당하면 이름으로 접근 시 내부적으로 함수(__get__)가 자동으로 실행
- [예제] 함수 이름으로 접근 처리
def add_(a, b) : return a + b print(add_.__get__) # c언어로 작성된 메소드래퍼 출력 x = add_.__get__(1) # 변환된 메소드를 변수에 할당 print(x(2)) [결과] <method-wrapper '__get__' of function object at 0x02A950B8> 3
[참고]
- 잇플, “한 권으로 개발자가 원하던 파이썬 심화 A to Z”, 2019.11