From f3288265e94b0f8892145afcd626f9baeb16ebe3 Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Fri, 18 Jan 2019 16:57:03 +0100 Subject: [PATCH] session 04 --- sessions/python-04.md | 236 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 232 insertions(+), 4 deletions(-) diff --git a/sessions/python-04.md b/sessions/python-04.md index 46e0b36..bb20ae1 100644 --- a/sessions/python-04.md +++ b/sessions/python-04.md @@ -104,7 +104,7 @@ def tire_carte((): return (valeur, couleur) (v, c) = tire_carte() -print("{} de {}", v, c) +print(v, "de", c) # 10 de trèfle ``` @@ -195,9 +195,237 @@ x = get_max(ma_liste) * on peut aussi utiliser la fonction native "max()" * on peut aussi utiliser une slice: `autre_liste = liste[:]` -# Conclusion -Une fonction ne peut modifier la valeur de ses arguments qui s'ils sont +# Valeur par défaut + +```python +def exemple_bizarre(l=[1, 2, 3]): + l.append(4) + return l + +>>> exemple_bizarre() +[1, 2, 3, 4] +>>> exemple_bizarre() +[1, 2, 3, 4, 4] +``` + +* Les arguments par défaut ne sont évalué qu'une seule fois) + +# Valeur par défaut (2) + +Parfois, ce comportement *peut* être voulu + +\vfill + +```python +def grosse_fonction(x, cache=dict()): + if x in cache: + return cache[x] + else: + resultat = ... # plein de calculs + cache[x] = resultat + return resultat +``` + +# Valeur par défaut (3) + +Sinon, remplacez l'argument mutable par un argument immutable + +```python +def exemple_bizarre(l=None): + if not l: + l = [1, 2, 3] + l.append(4) + return l + +>>> exemple_bizarre() +[1, 2, 3, 4] +>>> exemple_bizarre() +[1, 2, 3, 4, 4] +``` + +# Conclusions + +* Une fonction ne peut modifier la valeur de ses arguments qui s'ils sont mutables. -Toutes les copies doivent être explicites +* Toutes les copies doivent être explicites + +# + +\center Itérer sur les dictionnaires + + +# Itérer sur les clés + +```python +scores = { "alice": 3, "bob": 4 } +for prénom in scores: + score = scores[prénom] + print(prénom, score) +``` + +\vfill +Même chose avec la méthode `.keys()` + +```python +for prénom in scores.keys(): + ... + +``` + +# Itérer sur les valeurs + +```python +scores = { "alice": 3, "bob": 4 } +for score in scores.values(): + print(score) +``` + +# Itérer sur les clés *et* les valeurs + +```python +for (prénom, score) in scores.items() + print(prénom, score) +``` + +\vfill + +Notes: + +* on a gagné une ligne par rapport au premier exemple. +* `items()` renvoie une liste de tuples + +# Presque des listes + +Les méthodes `.keys()`, `.values()` et `.items()` ne retournent pas des listes, +mais des "vues". + +```python +>>> prénoms = scores.keys() +>>> prénoms[1] +TypeError: 'dict_keys' object does not support indexing +``` + +\vfill + +On détaillera cette question plus tard. + +# Forcer des listes + +En attendant, vous pouvez convertir les vues en listes: + +```python +>>> prénoms = scores.keys() +>>> premier_prénom = list(prénoms)[0] +``` + +# + +\center \huge La programmation n'est pas un art solitaire + +# Le mythe + +> Un développeur dans son garage a une idée géniale, +> l'implémente tout seul et gagne un tas de pognon. + +\vfill + +Ça n'existe pas (ou plus) + + +* Sauf dans les fictions +* Quasiment mon seul reproche à propos de la série *Silicon Valley* + +# La code review + +Ce qu'on a fait avec l'exercice de la dernière fois :) + +# Par mail - envoi + +```text +Bonjour Alice, voici une nouvelle fonction: + +def ma_fonction(): + ma_liste = ... + + if len(ma_liste) == 0: + # la liste est vide + + + +signé: Bob +``` + +# Par mail - réponse + +```text +Bonjour Bob, et merci pour ta contribution! + +def ma_fonction(): + ma_liste = ... + + if len(ma_liste) == 0: + # la liste est vide + >> Ici tu pourrais mettre `if not ma_liste` + + +signé Alice +``` + +# Par mail - envoi 2 + +```text +Bonjour Alice, voici une nouvelle version de mes changements + +def ma_fonction(): + ma_liste = ... + + if not ma_liste: + ... +``` + +# Code review + +Croyez-le ou nom, plein de projets fonctionnent comme ça. + +Pas d'outil spécifiques, on peut tout faire avec des e-mail +et du texte brut + +# D'autres outils + +Des outils essayent de "simplifier" le processus. En vrac: `gerrit`, `github`, `gitlab` ... + +Mais dans son essence le concept n'a pas changé + +# + +\center \huge Un atelier + +# Mob programming + +Ou programmation en foule + +# Les règles + +* Un pilote: le seul autorisé à modifier le code +* Un copilote: indique au pilote quoi faire +* On tourne toutes les 15 minutes + +# Le challenge + +On va prendre deux discours politique et faire de l'analyse automatique de texte dessus. + +Notamment, repérer les mots qui reviennent le plus + +# Jean Véronis - aparté + +Un universitaire malheureusement décédé s'en était fait une spécialité. + +Vous pouvez lire *Les Mots du Président* si ça vous dit. + +Il utilisait d'autres outils, bien sûr, mais ce qu'on va faire n'est pas si loin + +# Squelette du code + +Parlons-en!