[Python] First Class Function

Yerin·2019년 12월 6일
0

study-python

목록 보기
9/18
post-custom-banner
  • 퍼스트 클래스 함수
    프로그래밍 언어가 함수를 first-class citizen으로 취급하는 것이다. 함수 자체를 인자(argument)로써 다른 함수에 전달한거나 다른 함수의 결과값으로 리턴 할 수도 함수를 변수에 할당하거나 데이터 구조 안에 저장할 수도 있는 함수이다.
def square(x):
	return x*x

f=square

print f(5)

위 코드를 보면 함수 square 를 정의하고 호출하였다. f(5) 구문으로 square함수를 호출한 것을 볼 수 있다. 위에서 언급했듯이 프로그래밍 언어가 퍼스트클래스 함수를 지원하면 변수에 함수를 할당할수있고 인자로써 다른 함수에 전달하거나 함수의 리턴값으로도 사용할 수 있다.


다른 예제,

def logger(msg):
	def log_message():
    	print 'Log:', msg
    return log_message
    
log_hi = logger('Hi')
print log_hi
log_hi() 

log_message 라는 함수를 logger함수의 리턴값으로 리턴하여 log_hi라는 변수에 할당한 후 호출한 것을 볼 수 있다. 그런데 여기서 특이한 점을 볼 수 있는데, msg와 같은 함수의 지역변수 값은 함수가 종료된 이후에도 참조됐다는 것. 이런log_message와 같은 함수를 클로져라고 하며 클러져는 다른 함수의 지역변수를 그 함수가 종료된 이후에도 기억할 수 있다.

def logger(msg):
	
    def log_message():
    	print 'Log:', msg
        
    return log_message
    
log_hi = logger('Hi')
print log_hi
log_hi()

del logger #글로벌 네임스페이스에서 logger오브젝트 지운다. 

try:
	print logger
except NameError:
	print 'NameError: logger는 존재하지 않습니다.'
    
log_hi() #logger가 지워진 뒤에도 Log:Hi 가 출력된다.

ref: http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%8D%BC%EC%8A%A4%ED%8A%B8%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%95%A8%EC%88%98-first-class-function/

profile
졸꾸 !!!
post-custom-banner

0개의 댓글