Browse Source

session 04

master
Dimitri Merejkowsky 5 years ago
parent
commit
f3288265e9
1 changed files with 232 additions and 4 deletions
  1. +232
    -4
      sessions/python-04.md

+ 232
- 4
sessions/python-04.md View File

@@ -104,7 +104,7 @@ def tire_carte(():
return (valeur, couleur) return (valeur, couleur)


(v, c) = tire_carte() (v, c) = tire_carte()
print("{} de {}", v, c)
print(v, "de", c)
# 10 de trèfle # 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 la fonction native "max()"
* on peut aussi utiliser une slice: `autre_liste = liste[:]` * 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. 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!