지하 Python 워크플로우 최적화

PythonBeginner
지금 연습하기

소개

"Subterra"라는 활기찬 지하 커뮤니티에 오신 것을 환영합니다. 이곳은 밝은 두뇌들이 지구 표면 아래에서 활동하는 미래 도시입니다. 이 지하 낙원에서는 전통적인 지상 사회의 제약 없이 기술과 과학 혁신이 번성합니다. 여러분은 커뮤니티의 발전을 이끄는 강력한 코드를 생성하는 능력으로 알려진 유망한 과학자의 역할을 맡게 됩니다.

여러분의 목표는 동료 과학자들이 실험과 애플리케이션에서 기능을 측정, 향상 및 캡슐화할 수 있도록 지원하는 일련의 Python 데코레이터 (decorator) 를 설계하는 것입니다. 이러한 데코레이터는 자원 사용을 최적화하고, 프로토콜을 보호하며, 실험 결과를 추적하는 데 필수적입니다. 여기서 여러분의 작업은 Subterra 의 워크플로우를 간소화하여 지하 탐험 및 개발의 미래에 상당한 영향을 미칠 것입니다.

데코레이터 이해

이 단계에서는 Python 데코레이터 (decorator) 의 개념을 소개합니다. 데코레이터는 함수 또는 메서드의 동작을 수정할 수 있게 해주는 Python 의 독특한 기능입니다.

Python 파일을 열어 첫 번째 데코레이터를 정의합니다.

파일 이름: ~/project/decorator.py

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

## Test the decorated function
say_hello()

이 예제에서 my_decorator는 다른 함수 func를 입력으로 받아 func를 호출하기 전후에 추가적인 동작을 추가하는 중첩 함수 wrapper를 정의하는 함수입니다. @my_decorator 구문은 say_hello 함수에 데코레이터를 적용합니다.

파일에서 코드를 실행하고 출력을 관찰합니다.

$ python3 ~/project/decorator.py
Something is happening before the function is called.
Hello!
Something is happening after the function is called.

데코레이터 기능 향상

이제 기본 사항을 이해했으니, 데코레이터를 향상시켜 보겠습니다. 함수를 래핑할 뿐만 아니라 인수를 받는 데코레이터를 만들 것입니다.

같은 파일에서 다음 데코레이터를 정의합니다.

def do_twice(func):
    def wrapper_do_twice(*args, **kwargs):
        func(*args, **kwargs)
        func(*args, **kwargs)
    return wrapper_do_twice

@do_twice
def greet(name):
    print(f"Hello {name}!")

## Test the decorated function
greet("World")

이 데코레이터는 데코레이팅된 함수를 두 번 실행합니다. 래퍼가 임의의 수의 위치 및 키워드 인수를 허용하도록 하기 위해 *args**kwargs를 사용하는 것에 주목하십시오.

파일에서 코드를 실행하고 출력을 관찰합니다.

$ python3 ~/project/decorator.py
Hello World!
Hello World!

요약

이 랩에서는 Python 데코레이터를 이해하고 구현하는 과정을 안내했습니다. 간단한 데코레이터를 만들고, 데코레이터 내에서 함수 인수를 받아들이고, 이를 적용하여 함수의 동작을 수정하는 방법을 배웠습니다. 데코레이터는 Python 의 강력한 기능으로, 깔끔하고 재사용 가능한 코드 향상을 가능하게 합니다.

이 랩을 마치면 데코레이터를 만들고 사용하는 데 익숙해지고 실제 응용 프로그램에서 데코레이터의 잠재력을 인식할 수 있어야 합니다.