def traced(function):
def wrapper(*args, **kwargs):
response = function(*args, **kwargs)
print(f"{function.__name__}(args={args}, kwargs={kwargs}) => {response}")
return response
return wrapper
@traced
def get_max(*args):
return max(args)
@traced
def get_min(**kwargs):
return min(kwargs.values()) # Value 값을 출력
# return min(kwargs) # Key 값을 출력
get_max(10, 20, 30)
get_min(x=10, y=20, z=30)
get_max(args=(10, 20, 30), kwargs={}) => 30 get_min(args=(), kwargs={'x': 10, 'y': 20, 'z': 30}) => 10
10
def is_multiple(x):
def real_decorator(function): # 데코레이터 역활 함수
def wrapper(*args, **kwargs): # Wrapper 함수
response = function(*args, **kwargs)
return_text = f"{function.__name__} 의 반환값은 {x}의 배수"
if response % x == 0:
print(return_text + " 입니다.")
else:
print(return_text + " 아닙니다.")
return response
return wrapper
return real_decorator
@is_multiple(2)
def add_number(a, b):
return a + b
add_number(1,4)
add_number 의 반환값은 2의 배수 아닙니다.
5
class Trace:
def __init__(self, function):
self.function = function
def __call__(self):
text_string = f"{self.function.__name__}"
print(text_string + " 함수 시작")
self.function()
print(text_string + " 함수 종료")
@Trace
def hello_world():
print('hello')
hello_world()
hello_world 함수 시작 hello hello_world 함수 종료
# Decorator 를 사용하지 않고서도 동일한 결과값 출력
Trace(hello_world())
hello_world 함수 시작 hello hello_world 함수 종료
<__main__.Trace at 0x7fcd10d874f0>
# 매개변수를 활용하는 Class 데코레이터
class Trace:
def __init__(self, function):
self.function = function
def __call__(self, *args, **kwargs):
response = self.function(*args, **kwargs)
text_string = f"{self.function.__name__} (args={args}, kwargs={kwargs}) => {response}"
print(text_string)
return response
@Trace
def add_number(a, b):
return a + b
add_number(10, 20)
add_number(a=10, b=20)
add_number (args=(10, 20), kwargs={}) => 30 add_number (args=(), kwargs={'a': 10, 'b': 20}) => 30
30
class IsMultiple:
def __init__(self, x):
self.x = x
def __call__(self, function):
def wrapper(a, b):
response = function(a, b)
text = f"{function.__name__} 의 반환값은 {self.x}의 배수"
if response % self.x == 0:
print(text + " 입니다")
else:
print(text + "가 아닙니다")
return response
return wrapper
@IsMultiple(3)
def add(a, b):
return a + b
add(10,10)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-13-f50c1b44867f> in <module> ----> 1 @IsMultiple(3) 2 def add(a, b): 3 return a + b 4 5 add(10,10) TypeError: __init__() missing 1 required positional argument: 'function'
texts = '삼성전자의 삼성 갤럭시 폴드3는 삼성 전자에서 출시를 하였다'
texts.find('삼성 전자')
18
texts.replace('삼성 전자', '삼성전자')
'삼성전자의 삼성 갤럭시 폴드3는 삼성전자에서 출시를 하였다'
results = {}
results[
! pip install yaspin
Collecting yaspin Downloading yaspin-2.0.0-py3-none-any.whl (24 kB) Requirement already satisfied: termcolor<2.0.0,>=1.1.0 in /home/buffet/Coding/Python/Nlpy/lib/python3.8/site-packages (from yaspin) (1.1.0) Installing collected packages: yaspin Successfully installed yaspin-2.0.0
# https://github.com/pavdmyt/yaspin
import time
from yaspin import yaspin
# Context manager:
with yaspin():
time.sleep(3) # time consuming code
0m
# Function decorator:
@yaspin(text="Loading...")
def some_operations():
time.sleep(3) # time consuming code
some_operations()
0m Loading...