Sujets avancés

Écrire des fonctions en Python

Shayne Miel

Software Architect @ Duo Security

Contextes imbriqués

def copy(src, dst):
  """Copy the contents of one file to another.

  Args:
    src (str): File name of the file to be copied.
    dst (str): Where to write the new file.
  """

# Open the source file and read in the contents with open(src) as f_src: contents = f_src.read() # Open the destination file and write out the contents with open(dst, 'w') as f_dst: f_dst.write(contents)
Écrire des fonctions en Python

Contextes imbriqués

with open('my_file.txt') as my_file:
  for line in my_file:
    # do something
Écrire des fonctions en Python

Contextes imbriqués

def copy(src, dst):
  """Copy the contents of one file to another.

  Args:
    src (str): File name of the file to be copied.
    dst (str): Where to write the new file.
  """

# Open both files with open(src) as f_src: with open(dst, 'w') as f_dst:
# Read and write each line, one at a time for line in f_src: f_dst.write(line)
Écrire des fonctions en Python

Gestion des erreurs

def get_printer(ip):
  p = connect_to_printer(ip)

  yield

  # This MUST be called or no one else will
  # be able to connect to the printer
  p.disconnect()
  print('disconnected from printer')

doc = {'text': 'This is my text.'} with get_printer('10.0.34.111') as printer: printer.print_page(doc['txt'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    printer.print_page(doc['txt'])
KeyError: 'txt'
Écrire des fonctions en Python

Gestion des erreurs

try:
  # code that might raise an error
except:
  # do something about the error

finally: # this code runs no matter what
Écrire des fonctions en Python

Gestion des erreurs

def get_printer(ip):
  p = connect_to_printer(ip)

  try:
    yield
  finally:
    p.disconnect()
    print('disconnected from printer')

doc = {'text': 'This is my text.'} with get_printer('10.0.34.111') as printer: printer.print_page(doc['txt'])
disconnected from printer
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    printer.print_page(doc['txt'])
KeyError: 'txt'
Écrire des fonctions en Python

Modèles de gestionnaires de contexte

Ouvrir Fermer
Verrouiller Libérer
Modifier Réinitialiser
Entrer Quitter
Commencer Arrêter
Configurer Démonter
Connecter Déconnecter
1 Adapté de la présentation de Dave Brondsema lors de la conférence PyCon 2012 : https://youtu.be/cSbD5SKwak0?t=795
Écrire des fonctions en Python

Passons à la pratique !

Écrire des fonctions en Python

Preparing Video For Download...