컨텍스트 매니저 작성하기

Python으로 함수 작성하기

Shayne Miel

Software Architect @ Duo Security

컨텍스트 매니저를 정의하는 두 가지 방법

  • 클래스 기반
  • 함수 기반
Python으로 함수 작성하기

컨텍스트 매니저를 정의하는 두 가지 방법

  • 클래스 기반
  • 함수 기반 *
Python으로 함수 작성하기

컨텍스트 매니저 만드는 법


def my_context():

# Add any set up code you need
yield
# Add any teardown code you need
  1. 함수를 정의합니다.
  2. (선택) 필요한 설정 코드를 추가합니다.
  3. "yield" 키워드를 사용합니다.
  4. (선택) 필요한 정리 코드를 추가합니다.
Python으로 함수 작성하기

컨텍스트 매니저 만드는 법

@contextlib.contextmanager
def my_context():

# Add any set up code you need
yield
# Add any teardown code you need
  1. 함수를 정의합니다.
  2. (선택) 필요한 설정 코드를 추가합니다.
  3. "yield" 키워드를 사용합니다.
  4. (선택) 필요한 정리 코드를 추가합니다.
  5. `@contextlib.contextmanager` 데코레이터를 추가합니다.
Python으로 함수 작성하기

"yield" 키워드

@contextlib.contextmanager
def my_context():
  print('hello')
  yield 42
  print('goodbye')
with my_context() as foo:
  print('foo is {}'.format(foo))
hello
foo is 42
goodbye
Python으로 함수 작성하기

설정과 정리

@contextlib.contextmanager
def database(url):
  # set up database connection
  db = postgres.connect(url)

  yield db

  # tear down database connection
  db.disconnect()
url = 'http://datacamp.com/data'
with database(url) as my_db:
  course_list = my_db.execute(
    'SELECT * FROM courses'
  )

빈 공간

화살표

Python으로 함수 작성하기

설정과 정리

@contextlib.contextmanager
def database(url):
  # set up database connection
  db = postgres.connect(url)

  yield db

  # tear down database connection
  db.disconnect()
url = 'http://datacamp.com/data'
with database(url) as my_db:
  course_list = my_db.execute(
    'SELECT * FROM courses'
  )

빈 공간

빈 공간

빈 공간

화살표

Python으로 함수 작성하기

설정과 정리

@contextlib.contextmanager
def database(url):
  # set up database connection
  db = postgres.connect(url)

  yield db

  # tear down database connection
  db.disconnect()
url = 'http://datacamp.com/data'
with database(url) as my_db:
  course_list = my_db.execute(
    'SELECT * FROM courses'
  )

빈 공간

빈 공간

빈 공간

빈 공간

빈 공간

빈 공간

화살표

Python으로 함수 작성하기

값 또는 None 반환하기

@contextlib.contextmanager
def database(url):
  # set up database connection
  db = postgres.connect(url)

  yield db

  # tear down database connection
  db.disconnect()
url = 'http://datacamp.com/data'
with database(url) as my_db:
  course_list = my_db.execute(
    'SELECT * FROM courses'
  )
@contextlib.contextmanager
def in_dir(path):
  # save current working directory
  old_dir = os.getcwd()

  # switch to new working directory
  os.chdir(path)

  yield

  # change back to previous
  # working directory
  os.chdir(old_dir)
with in_dir('/data/project_1/'):
  project_files = os.listdir()
Python으로 함수 작성하기

연습해 봅시다!

Python으로 함수 작성하기

Preparing Video For Download...