본문 바로가기
인공지능/파이썬 기초

클로저와 데코레이터

by hyunji00pj 2024. 10. 1.

KDT_4기 파이썬 기초 0927(2)

2024.09.27 수업 내용 복습일기 두번째

 

오늘은 클로저와 데코레이터에 대해 알아보자

 

 

1.클로저(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))

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)
print(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)

데코레이터는 파이썬에서 함수나 메서드의 동작을 수정하거나 확장하기 위한 강력한 도구입니다. 데코레이터는 함수나 메서드를 래핑하거나 감싸서 추가 기능을 제공하며, 코드 재사용성과 가독성을 향상시킵니다. 데코레이터는 @ 기호를 사용하여 함수나 메서드 위에 적용됩니다.

 

time 모듈은 시간 관련 작업을 처리하기 위하여 사용된다. 모듈에 정의 된 기능을 사용하려면 먼저 모듈을 임포트하여야 한다

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)

result2 = func2(10,3)
print(result2)

result3 = func3(10,3)
print(result3)

 

'인공지능 > 파이썬 기초' 카테고리의 다른 글

스페셜 메서드  (0) 2024.10.01
파이썬의 상속  (0) 2024.10.01
객체지향과 클래스  (4) 2024.10.01
콜백함수와 람다함수  (0) 2024.09.30
변수의 범위  (2) 2024.09.30