말 그래로 기존의 함수에 약간의 첨가를 할 때 사용한다.

 

예를 들어보자.

name을 input으로 받으면, 포매팅 문자열로 넣어서 반환해주는 함수이다.

def greet(name):
    return f"Hello, {name}!"

print(greet("Alice"))

output: Hello, Alice

 

그런데 이러한 함수가 100가지가 되고,

모든 함수의 output을 대문자로 바꾼다고 생각해보자.

 

그러면 위의 함수는 다음과 같이 바꿔야한다.

def greet(name):
    return f"HELLO, {name.upper()}!"

print(greet("Alice"))

Hello -> HELLO

name -> name.upper()

 

이렇게 바꾸는 과정을 100번 해야한다.

 

그렇다면, 함수를 만들어서 재정의하는 건 어떨까?

def uppercase(func):
    def wrapper(text):
        result = func(text)
        return result.upper()
    return wrapper


def greet(name):
    return f"Hello, {name}!"

greet = uppercase(greet)

print(greet("Alice"))

이렇게 하면 이전의 방법보다는 편하지만, 결국 재정의 과정을 100번해야한다.

(greet = uppercase(greet))

 

더 편한 방법이 없을까?

이럴때 사용하는 방법이 decorator pattern이다.

def uppercase_decorator(func):
    def wrapper(text):
        result = func(text)
        return result.upper()
    return wrapper

@uppercase_decorator
def greet(name):
    return f"Hello, {name}!"

print(greet("Alice"))

 

재정의하고자 하는 함수 바로위에, @재정의함수를 사용하면 된다.

 

협업을 진행하려면, 패키지의 버전을 맞춰써야한다.

협업을 한개만 진행한다면 하나의 버전만 쓰면 되겠지만,

다양한 협업을 진행하는 경우, 각각의 프로젝트마다 패키지의 버전이 다를 수 있다.

 

이러한 경우를 위해, 프로젝트는 가상환경 세팅 후 진행한다.

가상환경 세팅을 위해서 venv를 사용한다.

 

venv 사용 방법

1. 가상 환경 생성

python3 -m venv <가상환경명>

 

2. 가상 환경 실행

source venv/bin/activate

3.  가상 환경 종료

deactivate

 

venv안에서 이제 개발된 패키지 버전에 맞춰서 환경을 만들어야한다.

이때는 pip을 사용한다.

pip 사용 방법

1. 설치된 패키지 확인

pip freeze

2. requirements.txt에 설치된 패키지 버전 저장

pip freeze > requirements.txt

3. requirements.txt에 기록된 패키지 설치

pip -r requirements.txt

'섭섭의 공부 > Programming' 카테고리의 다른 글

[Python] decorator pattern  (1) 2024.01.04

+ Recent posts