... | @@ -271,31 +271,29 @@ resultat = ma_fonction(5) # ici la fonction renvoie un tuple de 3 éléments |
... | @@ -271,31 +271,29 @@ resultat = ma_fonction(5) # ici la fonction renvoie un tuple de 3 éléments |
|
print (resultat) # donc la variable resultat est un tuple de 3 éléments
|
|
print (resultat) # donc la variable resultat est un tuple de 3 éléments
|
|
|
|
|
|
```
|
|
```
|
|
L'exécution du code donne :
|
|
L'exécution du code fait afficher : <kbd>(5, 10, 25)</kbd>
|
|
|
|
|
|
(5, 10, 25)
|
|
Ma variable resultat est un tuple autrement dit `resultat = (5, 10, 25)`
|
|
|
|
Un *tuple* est un conteneur, comme *list* mais avec des caractéristiques différentes.
|
|
|
|
Pour récupérer tous les termes on « déballe » le tuple (unpacking) :`(x,y,z) = resultat` ; les parenthèses ne sont pas obligatoires, on peut aussi écrire `x,y,z = resultat`.
|
|
|
|
|
|
|
|
On aura dans les 2 cas `x=5` ; `y=10` et `z=25`
|
|
|
|
|
|
Ma variable resultat est un tuple autrement dit resultat = (5, 10, 25)
|
|
Si on n’a besoin que du premier terme : on peut se contenter d'écrire `x, le_reste = resultat`
|
|
Un *tuple* est u conteneur, comme *list* mais avec des caractéristiques différentes.
|
|
|
|
Pour récupérer tous les termes on « déballe » le tuple (unpacking) :
|
|
|
|
|
|
|
|
(x,y,z) = resultat ou x,y,z = resultat.
|
|
|
|
|
|
|
|
On aura dans les 2 cas x=5 ; y=10 et z=25
|
|
|
|
|
|
|
|
Si on n’a besoin que du premier terme : on peut se contenter d'écrire
|
|
|
|
x, le_reste = resultat
|
|
|
|
|
|
|
|
Vous pourrez vérifier que dans ce cas le_reste est un *tuple* équivalent à (y,z), c'est logique !
|
|
Vous pourrez vérifier que dans ce cas le_reste est un *tuple* équivalent à (y,z), c'est logique !
|
|
Mais on peut faire encore plus succinct, pour bien montrer que le reste ne nous intéresse vraiment pas :
|
|
Mais on peut faire encore plus succinct, pour bien montrer que le reste ne nous intéresse vraiment pas :
|
|
x, _ = resultat ou même x, = resultat
|
|
`x, _ = resultat` ou même `x, = resultat `
|
|
( _ = nom de variable valide (!) , mais par convention on sait qu'on ne s’en servira pas )
|
|
( `_` = nom de variable valide (!) , mais par convention on sait qu'on ne s’en servira pas )
|
|
|
|
|
|
|
|
|
|
Si aucune variable ne récupère le résultat ce n’est pas gênant mais ce qui a été retourné est « perdu » _a priori_ car on n'a pas affecté de nom ; plus exactement on ne peut agir dessus (on pourrait épiloguer un peu plus, mais pour débuter cela suffira).
|
|
Si aucune variable ne récupère le résultat ce n’est pas gênant mais ce qui a été retourné est « perdu » _a priori_ car on n'a pas affecté de nom ; plus exactement on ne peut agir dessus (on pourrait épiloguer un peu plus, mais pour débuter cela suffira).
|
|
|
|
|
|
C’est le cas pour certaines fonctions matplotlib où on peut écrire plt.plot(x,y) (je trace juste une courbe) ou ma_courbe, = plt.plot(x,y) (en plus je nomme ma courbe, premier terme du tuple, je n’ai pas besoin des autres)
|
|
La fonction **plot** de matplotlib peut prendre en argument plusieurs vecteurs des x et des y : en conséquence elle renvoie un **tuple** d'objets de type Line2D. Ceci crée une petite bizarrerie quand on veut nommer l'objet renvoyé :
|
|
|
|
|
|
|
|
Rappel : on peut écrire `plt.plot(x,y)` (je trace juste une courbe, je ne nomme pas l'objet renvoyé)
|
|
|
|
|
|
|
|
Si on veut nommer la courbe on écrit cette fois `ma_courbe, = plt.plot(x,y)`. En effet, comme plot renvoie un **objet tuple** même s'il n'y a qu'une courbe, il faut que je "déballe" le tuple, pour prendre le premier objet (de type Line2D), d'où la **virgule**.
|
|
|
|
|
|
c) portée des variables : :warning: pas si simple en fait.
|
|
c) portée des variables : :warning: pas si simple en fait.
|
|
|
|
|
... | | ... | |