데코레이터
코드를 수정하지 않고 함수, 메서드 동작을 변경하거나 확장하고 싶을 때 사용
( ≒ 오버라이딩)
일반적으로 함수를 다른 함수에 매개변수로 전달하는 것처럼 구현된다
데코레이터 함수와 래퍼 함수
래퍼: 변수들 객체로 바꿔주는거
데코레이터 함수를 생성한다
매개변수로 다른 함수를 받는다
데코레이터 함수 내부에 래퍼함수를 만든다
래퍼 함수가 함수의 동작을 변경, 확장 해 줄 수 있다
def log_decorator(func):
def wrapper(*args, **kwargs):
print(func.__name__, "함수 실행 전")
result = func(*args, **kwargs)
print(func.__name__, "함수 실행 후")
return result
return wrapper
@log_decorator
def function():
print("데코레이터 함수 실행")
function()
# 결과:
# function 함수 실행 전
# 데코레이터 함수 실행
# function 함수 실행 후
일급객체
일급객체의 조건 :
변수에 저장 할 수 있다
인수(매개변수)로 전달 할 수 있다
반환값(return)으로 사용할 수 있다
자료구조 내부에 넣을 수 있다
파이썬에서는 함수가 일급객체이다
함수에 변수를 할당할 수 있고 인수를 전달하고 반환할 수 있다
그래서 런타임동안 처리 가능, 자료구조에 추가도 가능
클로저 Closure
함수 내부에서 정의된 함수에서 외부 함수의 변수를 참조하거나 변경을 하고
외부함수가 종료된 후에도 해당 사용했던 변수값을 유지할 수 있게 해주는 함수
( ≒ 래퍼함수)
def outer(x):
def inner(y):
return x+y
return inner
a = outer(5)
result = a(3)
print(result) #8
'Language > Python' 카테고리의 다른 글
[Python] Numpy: Numerical Python (0) | 2023.08.23 |
---|---|
[Python] 파일 입 · 출력, pickle 모듈 (0) | 2023.08.23 |
[Python] 람다 표현식 Lambda Expression (0) | 2023.08.21 |
[Python] 제어문 (컴프리핸션 Comprehension) + all · any 함수 (0) | 2023.08.18 |
[Python] 리스트(list) · 튜플(tuple) · range함수 · 슬라이스(slice) · 세트(set) · 딕셔너리(dictionary) (0) | 2023.08.16 |