Menulis context manager

Menulis Function di Python

Shayne Miel

Software Architect @ Duo Security

Dua cara mendefinisikan context manager

  • Berbasis kelas
  • Berbasis fungsi
Menulis Function di Python

Dua cara mendefinisikan context manager

  • Berbasis kelas
  • Berbasis fungsi *
Menulis Function di Python

Cara membuat context manager


def my_context():

# Tambahkan kode set up yang diperlukan
yield
# Tambahkan kode teardown yang diperlukan
  1. Definisikan fungsi.
  2. (opsional) Tambahkan kode set up yang dibutuhkan konteks.
  3. Gunakan kata kunci "yield".
  4. (opsional) Tambahkan kode teardown yang dibutuhkan konteks.
Menulis Function di Python

Cara membuat context manager

@contextlib.contextmanager
def my_context():

# Tambahkan kode set up yang diperlukan
yield
# Tambahkan kode teardown yang diperlukan
  1. Definisikan fungsi.
  2. (opsional) Tambahkan kode set up yang dibutuhkan konteks.
  3. Gunakan kata kunci "yield".
  4. (opsional) Tambahkan kode teardown yang dibutuhkan konteks.
  5. Tambahkan decorator `@contextlib.contextmanager`.
Menulis Function di Python

Kata kunci "yield"

@contextlib.contextmanager
def my_context():
  print('hello')
  yield 42
  print('goodbye')
with my_context() as foo:
  print('foo adalah {}'.format(foo))
hello
foo adalah 42
goodbye
Menulis Function di Python

Setup dan teardown

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

ruang kosong

panah

Menulis Function di Python

Setup dan teardown

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

ruang kosong

ruang kosong

ruang kosong

panah

Menulis Function di Python

Setup dan teardown

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

ruang kosong

ruang kosong

ruang kosong

ruang kosong

ruang kosong

ruang kosong

panah

Menulis Function di Python

Mengembalikan nilai atau None dengan yield

@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()
Menulis Function di Python

Ayo berlatih!

Menulis Function di Python

Preparing Video For Download...