class: center, middle # Fonctions --- # Fonctions * Une fonction permet de répéter une instruction plusieurs fois sans avoir à réécrire la totalité du code. * Syntaxe ```python def fonction(param1,param2): # attention à l'indentation instruction1 instruction2 return resultat ``` --- # Fonctions * Exemple ```python >>> def pluriel(param): ... param = param + "s" ... return param ... >>> mots=pluriel("sequence") >>> mots 'sequences' ``` --- # Passage d'arguments * Vous n'êtes pas tenu de préciser le type d'arguments (entiers, réels, chaîne de caractère,...) lors de l'appel de la fonction. ```python >>> def fois(x, y): ... return x*y ... >>> fois(2, 3) 6 >>> fois(3.1415, 5.23) 16.430045000000003 >>> fois(2, 5.23) 10.46 >>> fois('to', 2) 'toto' ``` * L'opérateur « `*` » reconnait plusieurs types, la fonction 'fois' peut donc effectuer des tâches différentes. --- # Passage d'arguments * Les fonctions sont capables de renvoyer plusieurs valeurs à la fois. * On peut dès lors effectuer des affectations multiples. ```python >>> def carre_cube(x): ... return (x**2, x**3) # renvoi d'un tuple ... >>> carre_cube(2) (4, 8) >>> z1, z2=carre_cube(2) # affectation multiple >>> z1 4 >>> z2 8 ``` --- # Passage d'arguments * Renvoi de plusieurs valeurs à la fois avec une liste ```python >>> def carre_cube2(x): ... return [x**2,x**3] ... >>> carre_cube2(3) [9, 27] >>> z1,z2 = carre_cube2(3) >>> z1 9 >>> z2 27 ``` --- # Passage d'arguments * Les fonctions peuvent avoir un nombre d'arguments variables. ```python >>> str = "Python débutant: 1er mars, Python avancé: 1er avril" >>> str.replace("Python", "PERL") # remplace toutes les occurences 'PERL débutant: 1er mars, PERL avancé: 1er avril' ``` ```python >>> str = "Python débutant: 1er mars, Python avancé: 1er avril" >>> str.replace("Python", "PERL", 1) # remplace une seule occurence 'PERL débutant: 1er mars, Python avancé: 1er avril' ``` * Pour avoir un nombre d'arguments variables, il faut définir des arguments facultatifs. ```python >>> def fct(x, y, z=1): # un argument facultatif a une valeur par défaut ... if z != 1: ... instruction ... return resultat ``` --- # Portée des variables L'endroit où est définit une variable détermine l'endroit où elle est accessible ! Allez sur __Python Tutor__ (http://pythontutor.com/visualize.html). Écrivez d'abord une fonction carre(x) qui renvoie x au carré. Écrivez en dessous un programme principal qui appelle carre() avec la valeur 2 en paramètre. Suivez l'éxécution pour distinguer les valeurs des variables selon le contexte. ```python >>> # Fonction >>> def carre(x): ... z = 10 ... print("Valeur de z dans la fonction :", z) ... return x**2 >>> # Programme principal >>> z = 5 >>> print("Valeur de z dans le programme principal :", z) >>> resultat = carre(2) >>> print("Valeur de z dans le programme principal :", z) >>> print(resultat) ``` --- # Travaux pratiques Créez un programme Python nommé « `revcomp.py` » ou un notebook Jupyter « `revcomp.ipynb` » contenant deux fonctions permettant de "reverse complémenter" une séquence en 25 minutes d'autonomie : * création d'une __fonction__ avec __un paramètre__ pour __inverser__ la __séquence__, * création d'une __fonction__ avec __un paramètre__ pour __complémenter__ la __séquence__, * __retour__ du __résultat__ et __affichage__ de celui-ci. --- # Travaux pratiques Créez un programme Python « `traduction.py` » ou un notebook Jupyter « `traduction.ipynb` » contenant une fonction permettant de traduire une séquence en 25 minutes d'autonomie : * création d'une __fonction__ avec __un paramètre__ pour __traduire__ la __séquence__, * __retour__ du __résultat__ et __affichage__ de celui-ci. --- # Code génétique ```python code_genetique = { "GCT":"A","GCC":"A","GCA":"A","GCG":"A", "TTA":"L","TTG":"L","CTT":"L","CTC":"L", "CTA":"L","CTG":"L","CGT":"R","CGC":"R", "CGA":"R","CGG":"R","AGA":"R","AGG":"R", "AAA":"K","AAG":"K","AAT":"N","AAC":"N", "ATG":"M","GAT":"D","GAC":"D","TTT":"F", "TTC":"F","TGT":"C","TGC":"C","CCT":"P", "CCC":"P","CCA":"P","CCG":"P","CAA":"Q", "CAG":"Q","TCT":"S","TCC":"S","TCA":"S", "TCG":"S","AGT":"S","AGC":"S","GAA":"E", "GAG":"E","ACT":"T","ACC":"T","ACA":"T", "ACG":"T","GGT":"G","GGC":"G","GGA":"G", "GGG":"G","TGG":"W","CAT":"H","CAC":"H", "TAT":"Y","TAC":"Y","ATT":"I","ATC":"I", "ATA":"I","GTT":"V","GTC":"V","GTA":"V", "GTG":"V","TAG":"*","TGA":"*","TAA":"*"} ```