Bağlam yöneticileri yazma

Python'da Fonksiyon Yazımı

Shayne Miel

Software Architect @ Duo Security

Bir bağlam yöneticisi tanımlamanın iki yolu

  • Sınıf tabanlı
  • Fonksiyon tabanlı
Python'da Fonksiyon Yazımı

Bir bağlam yöneticisi tanımlamanın iki yolu

  • Sınıf tabanlı
  • Fonksiyon tabanlı *
Python'da Fonksiyon Yazımı

Bağlam yöneticisi nasıl oluşturulur


def my_context():

# Add any set up code you need
yield
# Add any teardown code you need
  1. Bir fonksiyon tanımlayın.
  2. (isteğe bağlı) Gerekli kurulum kodunu ekleyin.
  3. "yield" anahtar sözcüğünü kullanın.
  4. (isteğe bağlı) Gerekli kapatma kodunu ekleyin.
Python'da Fonksiyon Yazımı

Bağlam yöneticisi nasıl oluşturulur

@contextlib.contextmanager
def my_context():

# Add any set up code you need
yield
# Add any teardown code you need
  1. Bir fonksiyon tanımlayın.
  2. (isteğe bağlı) Gerekli kurulum kodunu ekleyin.
  3. "yield" anahtar sözcüğünü kullanın.
  4. (isteğe bağlı) Gerekli kapatma kodunu ekleyin.
  5. `@contextlib.contextmanager` dekoratörünü ekleyin.
Python'da Fonksiyon Yazımı

"yield" anahtar sözcüğü

@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'da Fonksiyon Yazımı

Kurulum ve kapatma

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

boşluk

ok

Python'da Fonksiyon Yazımı

Kurulum ve kapatma

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

boşluk

boşluk

boşluk

ok

Python'da Fonksiyon Yazımı

Kurulum ve kapatma

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

boşluk

boşluk

boşluk

boşluk

boşluk

boşluk

ok

Python'da Fonksiyon Yazımı

Bir değer veya None döndürme

@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'da Fonksiyon Yazımı

Hadi pratik yapalım!

Python'da Fonksiyon Yazımı

Preparing Video For Download...