본문 바로가기

코딩/파이썬

객체지향과 클래스2

클로저

: 함수와 그 함수가 참조하는 외부 변수(또는 자유 변수) 사이의 관계를 나타낸다.

클로저는 함수의 내부에서 정의된 함수로, 내부 함수가 외부 함수의 변수에 접근할 수 있고, 외부 함수는 내부 함수를

반환할 수 있다. 이로 인해 함수와 그 함수가 참조하는 상태(변수)를 함께 저장하고 유지할 수 있다.

 

def mul2(n):
	return n * 2
print(mul2(10))
print(mul2(5))

20

10

def mul5(n):
	return n * 5
print(mul5(10))
print(mul5(5))

50

25

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

20

10

mul5 = Mul(5)
print(mul5.mul(10))
print(mul5.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)) # 실행
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

mul5 = mul(5)
print(mul5(10))

50

 

데코레이터

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

 

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)

 함수가 시작되었습니다

 함수 수행시간: 9.131431579589844e-05

 13

def func2(a, b):
	start = time.time()
        print('함수가 시작되었습니다')

        result = a * b

        end = time.time()
        print(f'함수 수행시간: {end - start}')

        return result

 함수가 시작되었습니다

 함수 수행시간: 0.0015420913696289062

 30

# 데코레이터 만들기
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)

 함수가 시작되었습니다

 함수 수행시간: 0.0008983612060546875

 13

deco2 = elapsed(func2)
result = deco2(10, 3)
print(result)

 함수가 시작되었습니다

 함수 수행시간: 0.00010037422180175781

 30

 

@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)

함수가 시작되었습니다

 함수 수행시간: 8.511543273925781e-05

 13

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

함수가 시작되었습니다

 함수 수행시간: 0.00016880035400390625

 30

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

함수가 시작되었습니다

 함수 수행시간: 6.031990051269531e-05

 7

'코딩 > 파이썬' 카테고리의 다른 글

스페셜 메서드  (0) 2024.03.20
파이썬 상속  (0) 2024.03.19
파이썬 과제 (3). 로또 예측 프로그램  (0) 2024.03.19
파이썬 과제 (2). 가위, 바위, 보 게임 만들기  (0) 2024.03.19
객체지향과 클래스1  (0) 2024.03.19