1. 클로저
내부 함수가 외부 함수의 스코프에서 정의된 변수를 참조할 수 있는 기능이다.
def mul2(n):
return n*2
print(mul2(10))
print(mul2(5))
def mul5(n):
return n*5
print(mul5(10))
print(mul5(5))
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('생성자 호출-1')
self.m = m
def __call__(self, n):
print('call 호출-2')
return self.m * n
mul2 = Mul(2)
mul2(10)
# 클로저 사용하기
def mul(m):
def wrapper(n):
return m * n
return wrapper
mul2 = mul(2)
'''
def wrapper(n):
return 2 * n
'''
print(mul2(10))
mul5 = mul(5)
print(mul5(10))
2. 데코레이터(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
@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)
'파이썬 > 파이썬 기초 문법' 카테고리의 다른 글
파이썬 스페셜 메서드 (4) | 2024.10.19 |
---|---|
파이썬 상속 (2) | 2024.10.19 |
객체지향과 클래스 (0) | 2024.10.14 |
파이썬 콜백 함수와 람다 함수 (1) | 2024.10.07 |
파이썬 변수의 범위 (2) | 2024.09.30 |