[파이썬] 함수 (Function)

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

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^