[파이썬] 함수 (Function)

I. 함수 정의 방법

머리부– 예약어(def)를 먼저 쓰고 함수명과 매개변수를 작성, 콜론(:)을 붙여 완성
몸체부– 함수의 기능 작성, 결과를 예약어(return)과 변환값 작성
– 아무런 기능이 없을 때도 블록 문장(pass문) 작성
호출– 함수 이름 다음 실행 연산자인 괄호를 붙여 실행
– 인자가 있으면 매개변수와 동일하게 실행 연산자 내 지정
  • 함수 이름으로 이름 공간이 저장되고 함수 객체를 검색하므로 다른 변수나 모듈 이름과 다르게 작성
  • [예제] 함수 정의
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def function() : # 머리부
a = 10 # 몸체부
return a # 몸체부
func = function() # 호출
print(func, type(func))
[결과]
10 <class 'int'>
def function() : # 머리부 a = 10 # 몸체부 return a # 몸체부 func = function() # 호출 print(func, type(func)) [결과] 10 <class 'int'>
def function() :    # 머리부
    a = 10          # 몸체부
    return a        # 몸체부

func = function()   # 호출
print(func, type(func))

[결과]
10 <class 'int'>

 

II. 도움말(help)

  • 기능에 관한 설명을 문자열로 작성 시 __doc__ 속성에 문서화
  • [예제] help 기능 사용
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def add_(a, b) :
""" 이 함수는 두 개의 매개변수를 더하는 함수 입니다.
"""
return a + b
print(add_.__doc__)
help(add_)
[결과]
이 함수는 두 개의 매개변수를 더하는 함수 입니다.
Help on function add_ in module __main__:
add_(a, b)
이 함수는 두 개의 매개변수를 더하는 함수 입니다.
def add_(a, b) : """ 이 함수는 두 개의 매개변수를 더하는 함수 입니다. """ return a + b print(add_.__doc__) help(add_) [결과] 이 함수는 두 개의 매개변수를 더하는 함수 입니다. Help on function add_ in module __main__: add_(a, b) 이 함수는 두 개의 매개변수를 더하는 함수 입니다.
def add_(a, b) :
    """ 이 함수는 두 개의 매개변수를 더하는 함수 입니다.
    """
    return a + b

print(add_.__doc__)

help(add_)

[결과]
이 함수는 두 개의 매개변수를 더하는 함수 입니다.

Help on function add_ in module __main__:

add_(a, b)
    이 함수는 두 개의 매개변수를 더하는 함수 입니다.

 

III. 함수 객체 사용

  • 함수 객체를 변수에 할당
  • [예제] 함수 객체를 변수에 할당
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def func(a, b) :
return a, b
var = func
print(var.__name__)
[결과]
func
def func(a, b) : return a, b var = func print(var.__name__) [결과] func
def func(a, b) :
    return a, b

var = func

print(var.__name__)

[결과]
func
  • [예제] 함수 호출 시 인자로 전달
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def func(a, b) :
return a, b
def func2(func, *args) :
return func(*args)
print(func2(func, 10, 20))
[결과]
(10, 20)
def func(a, b) : return a, b def func2(func, *args) : return func(*args) print(func2(func, 10, 20)) [결과] (10, 20)
def func(a, b) :
    return a, b

def func2(func, *args) :
    return func(*args)

print(func2(func, 10, 20))

[결과]
(10, 20)
  • 값을 하나만 반환하므로 튜플로 처리

 

IV. 함수 이름으로 접근

  • 함수 클래스도 디스크립터이므로 디스크립터 클래스로 객체를 만들어 변수에 할당하면 이름으로 접근 시 내부적으로 함수(__get__)가 자동으로 실행
  • [예제] 함수 이름으로 접근 처리
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^