====== Structures de contrôle ====== ---- ===== Test ===== ==== Instruction if ==== if condition: bloc de lignes else: bloc de lignes ---- ===== Boucle ===== ==== Instruction for..in==== for variable in sequence: bloc de lignes else: bloc de lignes ==== Instruction while ==== * L’instruction while permet d’exécuter un bloc de lignes tant qu’une expression est vérifiée. * Si l’expression n’est plus vraie l’instruction else est exécutée si celle-ci existe et la boucle s’arrête. while condition: bloc de lignes else: bloc de lignes ==== Contrôle des itérations ==== | continue | interrompt l’execution de la boucle pour l’élément en cours et passe à l’élement suivant | | break | interrompt l’execution de la boucle et n’exécute pas l’instruction else | ---- ===== Les list comprehensions ===== Les lists comprehensions donnent un moyen concis d’appliquer une fonction sur chaque élément d’une liste afin d’en produire une nouvelle. >>> nombres = [1,3,8,9,7,32,89,42] >>> # retourner sous forme de liste chacun des nombres au carré >>> [nombre*nombre for nombre in nombres] [1, 9, 64, 81, 49, 1024, 7921, 1764] >>> nombres = [1,3,8,9,7,32,89,42] >>> # retourner sous forme de liste les nombres pairs >>> [nombre for nombre in nombres if nombre%2==0] [8, 32, 42] ---- ===== Les dict comprehensions ===== Les dict comprehensions donnent un moyen concis de créer un dictionnaire à partir d’une itération. >>> {x: x**2 for x in (2, 4, 6)} {2: 4, 4: 16, 6: 36} ---- ===== Exceptions ===== ==== try..except..else ==== Lorsqu’une exception est levée il est possible de la stopper en interceptant l’erreur. try: bloc de code surveillé except: bloc de code exécuté si l'exception est levée Il est fortement conseillé de spécifier l’exception afin de ne pas masquer silencieusement tous les types d’erreur qui pourrait intervenir. try: bloc de code surveillé except Exception: bloc de code exécuté si l'exception est levée === Exemples d'exceptions === * AttributeError * ImportError * IndentationError * IndexError * KeyError * MemoryError * SyntaxError * TypeError * ZeroDivisionError ==== try..finally ==== try: bloc de code surveillé finally: code toujours exécuté (y compris si raise ou return dans le bloc surveillé). ---- ===== Fonctions ===== * La définition d’une fonction se fait par le mot clé def suivi du nom de la fonction. * Les éventuels paramètres sont déclarés entre parenthèses. * Le caratère “:” délimite le début de la fonction. * Le bloc de la fonction est délimité par les indentations. ==== Définition ==== def say_hello(firstname, lastname): print ("Hello {} {}".format(firstname.title(), lastname.title())) ==== Utilisation ==== say_hello('Terry', 'gilliam') ==== Paramètres ==== === Paramètres explicites === * Les paramètres explicites sont séparés par une virgule et peuvent être enrichis d’une valeur par défaut, ils sont dans ce cas optionnels. * Il est nécessaire de regrouper les paramètres optionnels à la fin de la liste des paramètres. * Les paramètres peuvent être nommés sans respecter un ordre précis. >>> def say_hello(firstname, gender='Mr', lastname=''): ... fullname = ' '.join([gender, firstname, lastname]) ... print("Hello {}".format(fullname)) >>> say_hello('Terry') Hello Mr Terry >>> say_hello('Yolande', 'Mme') Hello Mme Yolande >>> say_hello('Yolande', lastname='Moreau', gender='Mme') Hello Mme Yolande Moreau === Paramètres non explicites === * Les paramètres non explicites permettent de spécifier autant de valeurs que l’on souhaite sans qu’il soit nécessaire de les spécifier dans la signature de la fonction. * Ils sont fournis sous la forme nom=valeur, et sont accessibles à l’intérieur de la fonction sous forme de dictionnaire. * Les paramètres non explicites sont préfixés d’une double étoile. >>> def show_actors(**actors): ... for actor, name in actors.items(): ... print("{}:{}" .format(actor, name)) >>> show_actors(actor1='Terry Gilliam', actor2='John Cleese') actor2:John Cleese actor1:Terry Gilliam === Paramètres arbitraires === * Les paramètres arbitraires fonctionnent de la même manière que les paramètres non explicites mais ne sont pas nommés. * Il sont accessibles à l’intérieur de la fonction sous forme d’un tuple. * Les paramètres arbitraires sont préfixés d’une étoile >>> def ajoute_acteurs(*actors): ... liste = [] ... for actor in actors(): ... liste.append(actor) ... return liste >>> ajoute_cteurs('Terry Gilliam', 'John Cleese') ['John Cleese', 'Terry Gilliam'] Les 3 types de paramètres peuvent être utilisés dans une même fonction, dans ce cas leur ordre doit être le suivant:\\ \\ def fonction(param1, param2=2, *arbitraires, **non-explicites): ==== Docstrings ==== Les docstrings sont des chaines de caractères placées au début du corps des fonctions. Ils sont associés à la variable __doc__ de la fonction. >>> def get_full_name(firstname, lastname): ... """Retourne le nom complet""" ... return ' '.join([firstname, lastname]) >>> get_full_name.__doc__ 'Retourne le nom complet' ----