카테고리 없음
2024.03.19 6일차
동동순이
2024. 3. 19. 17:32
클로저
클로저(Closure)는 프로그래밍 언어에서 중요한 개념 중 하나로, 함수와 그 함수가 참조하는 외부 변수(또는 자유 변수) 사이의 관계를 나타냅니다. 클로저는 함수의 내부에서 정의된 함수로, 내부 함수가 외부 함수의 변수에 접근할 수 있고, 외부 함수는 내부 함수를 반환할 수 있습니다. 이로 인해 함수와 그 함수가 참조하는 상태(변수)를 함께 저장하고 유지할 수 있습니다.
def mul2(n):
return n * 2
print(mul2(10))
print(mul2(5))
20
10
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))
50
25
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)) # 실핼 call 호출됨
print(mul2(5)) # 실행
생성자 호출
call 호출
20
call 호출
10
# 클로저 사용하기
def mul(m):
def wrapper(n):
return m * n
return wrapper # 클로저의 형태
'''
def wrapper(n):
return 2 * n
'''
mul2 = mul(2)
print(mul2(10))
20
데코레이터
데코레이터(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)
함수가 시작되었습니다
함수 수행시간: 7.462501525878906e-05
13
time.time() 지금 시간을 알아볼수 있다.
# 데코레이터 만들기
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)
함수가 시작되었습니다
함수 수행시간은 7.796287536621094e-05
13
@elapsed
def func1(a, b):
result = a + b
return result
@elapsed
def func2(a, b):
result = a + b
return result
@elapsed
def func3(a, b):
result = a - b
return result
result = func1(10, 3)
print(result)
result = func2(10, 3)
print(result)
result = func3(10, 3)
print(result)
함수가 시작되었습니다
함수 수행시간은 0.0009424686431884766
13
함수가 시작되었습니다
함수 수행시간은 0.0013077259063720703
13
함수가 시작되었습니다
함수 수행시간은 0.0008938312530517578
7