클로저(Closure)는 내부 함수가 자신을 감싸고 있는 외부 함수의 변수에 접근할 수 있는 특성을 가지며, 외부 함수가 호출된 후에도 그 변수의 상태를 기억하고 사용할 수 있는 기능으로, 주로 데이터 은닉과 상태 유지에 활용됩니다.
def mul2(n):
return n * 2
print(mul2(10))
print(mul2(5))
def mul5(n):
return n * 5
print(mul5(10))
print(mul5(5))
# mul1, mul2, mul3 ... mul100도 만들어야 하나?
class Mul:
def __init__(self, m):
self.m = m
def mul(self, n):
return self.m * n
mul2 = Mul(2)
print(mul2.mul(10))
print(mul2.mul(5))
mul5 = Mul(5)
print(mul5.mul(10))
print(mul5.mul(5))
class Mul:
def __init__(self, m):
print('생성자 호출')
self.m = m
def __call__(self, n):
print('call 호출')
return self.m * n
mul2 = Mul(2)
print(mul2(10))
mul5 = Mul(5)
print(mul5(10))
# 클로저 사용하기
def mul(m):
def wrapper(n):
return m * n
return wrapper
mul2 = mul(2)
print(mul2(10))
mul5 = mul(5)
print(mul5(10))
데코레이터(Decorator)는 파이썬에서 함수나 클래스에 새로운 기능을 추가할 수 있도록 해주는 문법입니다. 함수 앞에 @ 기호를 붙여 사용하며, 기존 함수를 변경하지 않고도 그 동작을 확장하거나 수정할 수 있습니다. 예를 들어, 실행 시간을 측정하거나, 로그인 여부를 검사하는 기능을 함수에 쉽게 덧붙일 수 있습니다. 데코레이터는 다른 함수를 인자로 받아서 감싸는 방식으로 작동하며, 코드의 재사용성과 가독성을 높이는 데 유용한 도구입니다.
import time
def func1(a, b):
start = time.time()
print('함수가 시작되었습니다')
result = a + b
end = time.time()
print(f'함수 수행시간: {end - start}')
return result
result = func1(10, 3)
print(result)
def func2(a, b):
start = time.time()
print('함수가 시작되었습니다')
result = a * b
end = time.time()
print(f'함수 수행시간: {end - start}')
return result
result = func2(10, 3)
print(result)
# 데코레이터 만들기
def func1(a, b):
result = a + b
return result
def func2(a, b):
result = a * b
return result
def elapsed(func):
def wrapper(a, b):
start = time.time()
print('함수가 시작되었습니다')
result = func(a, b)
end = time.time()
print(f'함수 수행시간: {end - start}')
return result
return wrapper
deco1 = elapsed(func1)
result = deco1(10, 3)
print(result)
deco2 = elapsed(func2)
result = deco2(10, 3)
print(result)
@elapsed
def func1(a, b):
result = a + b
return result
@elapsed
def func2(a, b):
result = a * b
return result
result = func1(10, 3)
print(result)
result = func2(10, 3)
print(result)
파이썬 비동기 프로그래밍 (1) | 2024.12.04 |
---|---|
파일 입출력 라이브러리 (0) | 2023.09.14 |
파이썬 모듈 (0) | 2023.09.13 |
타입 어노테이션 (0) | 2023.09.12 |
파일 입출력 (0) | 2023.09.12 |