การเขียน context manager

การเขียนฟังก์ชันใน Python

Shayne Miel

Software Architect @ Duo Security

2 วิธีในการกำหนด context manager

  • แบบ Class
  • แบบ Function
การเขียนฟังก์ชันใน Python

2 วิธีในการกำหนด context manager

  • แบบ Class
  • แบบ Function *
การเขียนฟังก์ชันใน Python

วิธีสร้าง context manager


def my_context():

# Add any set up code you need
yield
# Add any teardown code you need
  1. กำหนดฟังก์ชัน
  2. (ไม่บังคับ) เพิ่มโค้ด setup ที่ต้องการ
  3. ใช้คีย์เวิร์ด "yield"
  4. (ไม่บังคับ) เพิ่มโค้ด teardown ที่ต้องการ
การเขียนฟังก์ชันใน Python

วิธีสร้าง context manager

@contextlib.contextmanager
def my_context():

# Add any set up code you need
yield
# Add any teardown code you need
  1. กำหนดฟังก์ชัน
  2. (ไม่บังคับ) เพิ่มโค้ด setup ที่ต้องการ
  3. ใช้คีย์เวิร์ด "yield"
  4. (ไม่บังคับ) เพิ่มโค้ด teardown ที่ต้องการ
  5. เพิ่ม decorator `@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

Setup และ 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'
  )

blankspace

arrow

การเขียนฟังก์ชันใน Python

Setup และ 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'
  )

blankspace

blankspace

blankspace

arrow

การเขียนฟังก์ชันใน Python

Setup และ 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'
  )

blankspace

blankspace

blankspace

blankspace

blankspace

blankspace

arrow

การเขียนฟังก์ชันใน Python

การ yield ค่าหรือ 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...