@@ -7,12 +7,13 @@ Instructions | |||||
Pour l'instant, dans tous les exemples de code, chaque ligne qu'on a écrit | Pour l'instant, dans tous les exemples de code, chaque ligne qu'on a écrit | ||||
contenait une *instruction*. | contenait une *instruction*. | ||||
Un instruction ne renvoie pas de valeur, mais a un | |||||
effet sur le programme. | |||||
Un instruction a un effet sur le programe dans lequel elle est présented | |||||
Par exemple, l'expression ``print("bonjour")`` affiche "bonjour" dans | Par exemple, l'expression ``print("bonjour")`` affiche "bonjour" dans | ||||
le terminal. On dit que l'expression est *exécutée*. | le terminal. On dit que l'expression est *exécutée*. | ||||
En règle générale, les expressions sont éxécutées une par une, de haut en bas. | |||||
Expressions | Expressions | ||||
----------- | ----------- | ||||
@@ -48,15 +49,14 @@ Variables et valeurs | |||||
On peut associer des *variables* à des *valeurs* en les plaçant | On peut associer des *variables* à des *valeurs* en les plaçant | ||||
de part et d'autre du signe ``=`` : on appelle cette opération | de part et d'autre du signe ``=`` : on appelle cette opération | ||||
une *assignation*:: | |||||
une *affectation*:: | |||||
a = 2 | a = 2 | ||||
Notez qu'une assignation *n'est pas* une expression, c'est une | |||||
*instruction*. | |||||
Ici on assigne l'entier 2 à la variable ``a``. | |||||
On dit aussi que ``a`` est une *référence* vers la valeur ``2``. | |||||
Notez qu'une affectation *n'est pas* une expression, c'est une | |||||
*instruction*. | |||||
Si plus tard dans le code, on utilise le nom de la variable, | Si plus tard dans le code, on utilise le nom de la variable, | ||||
tout se passera comme si nom de la variable avait été | tout se passera comme si nom de la variable avait été | ||||
@@ -71,8 +71,8 @@ remplacé par sa valeur:: | |||||
Variables et expressions | Variables et expressions | ||||
------------------------- | ------------------------- | ||||
En fait, on peut assigner une variable à n'importe quelle | |||||
*expression*, et pas simplement des littéraux:: | |||||
En fait, on peut assigner n'importe qu'elle *expression* à une variable, | |||||
et pas simplement des littéraux:: | |||||
a = 1 + 2 | a = 1 + 2 | ||||
print(a) | print(a) | ||||
@@ -109,8 +109,8 @@ Autres exemples:: | |||||
Changer la valeur d'une variable | Changer la valeur d'une variable | ||||
--------------------------------- | --------------------------------- | ||||
On peut aussi *changer* la valeur d'une variable en l'assignant | |||||
à une nouvelle valeur:: | |||||
On peut aussi *changer* la valeur d'une variable en affectant | |||||
une nouvelle valeur à celle-ci:: | |||||
a = 2 | a = 2 | ||||
@@ -119,10 +119,10 @@ On peut aussi *changer* la valeur d'une variable en l'assignant | |||||
print(a) | print(a) | ||||
# affiche: 2, puis 3 | # affiche: 2, puis 3 | ||||
Combiner opération et assignation | |||||
Combiner opération et affectation | |||||
---------------------------------- | ---------------------------------- | ||||
La notation ``+=`` permet de combiner addition et assignation : | |||||
La notation ``+=`` permet de combiner addition et affectation : | |||||
les deux exemples ci-dessous sont équivalents:: | les deux exemples ci-dessous sont équivalents:: | ||||
x = 3 | x = 3 | ||||
@@ -41,7 +41,7 @@ Par exemple:: | |||||
.. warning:: | .. warning:: | ||||
Ne pas confondre: ``==`` pour la comparaison et ``=`` pour l'assignation | |||||
Ne pas confondre: ``==`` pour la comparaison et ``=`` pour l'affectation | |||||
Autres opérations booléennes | Autres opérations booléennes | ||||
----------------------------- | ----------------------------- | ||||
@@ -54,9 +54,10 @@ Appel: en passant une variable ou une valeur dans les parenthèses:: | |||||
dire_bonjour("Germaine") | dire_bonjour("Germaine") | ||||
L'éxécution de l'appel à une foctionne exactement comme si on assignait | |||||
les arguments de la fonction avant d'éxécuter le code | |||||
dans le corps:: | |||||
Pour évaluer une expression qui contient l'appel a une fonction, on: | |||||
* assigne le contenu des parenthèses aux arguments de la fonction | |||||
* puis on éxécute les instructions dans le corps de la fonction | |||||
# Ceci: | # Ceci: | ||||
dire_bonjour("Dimitri") | dire_bonjour("Dimitri") | ||||
@@ -10,7 +10,7 @@ Récupérer la valeur de retour:: | |||||
a = 3 | a = 3 | ||||
b = 4 | b = 4 | ||||
c = additionner(a, b) # encore une assignation | |||||
c = additionner(a, b) # encore une affectation | |||||
print(c) | print(c) | ||||
# Affche: 7 | # Affche: 7 | ||||
@@ -81,8 +81,8 @@ Avec les mots-clés ``for`` et `` in``:: | |||||
prénoms = ["Alice", "Bob", "Charlie"] | prénoms = ["Alice", "Bob", "Charlie"] | ||||
for prénom in prénoms: | for prénom in prénoms: | ||||
# La variable 'prénom" est assignée à chaque | |||||
# élément de la liste | |||||
# Chaque élément de la liste est assigné tour à tour | |||||
# à la variable 'prénom" | |||||
print("Bonjour", prénom) | print("Bonjour", prénom) | ||||
.. code-block:: text | .. code-block:: text | ||||
@@ -90,9 +90,10 @@ Avec ``for ... in ...``, comme pour les listes:: | |||||
scores = {"john": 10, "bob": 42} | scores = {"john": 10, "bob": 42} | ||||
for nom in scores: | for nom in scores: | ||||
# `nom` est assigné à "john" puis "bob" | |||||
# on assigne la valeur "john" à la variable `nom`, puis "bob" | |||||
score_associé_au_nom = scores[nom] | score_associé_au_nom = scores[nom] | ||||
# score_associé_au_nom est assigné à '10' puis '42' | |||||
# on assigne la valeur 10 puis la valeur 42 à la variable | |||||
# score_associé_au_nom | |||||
print(nom, score_associé_au_nom) | print(nom, score_associé_au_nom) | ||||
.. code-block:: | .. code-block:: | ||||
@@ -114,7 +114,7 @@ On peut *créer* des attributs dans *n'importe quel instance*, en utilisant l'*a | |||||
print(mon_instance.x) | print(mon_instance.x) | ||||
# affiche: 42 | # affiche: 42 | ||||
Ici l'attribut ``mon_attribut`` de l'instance ``mon_instance`` à la valeur de l'entier ``42``. | |||||
Ici on assigne la valeur ``42`` à l'attribut ``x`` de l'instance ``mon_instance`` | |||||
Méthodes - définition | Méthodes - définition | ||||
---------------------- | ---------------------- | ||||
@@ -17,7 +17,7 @@ Importer un module | |||||
Ou: accéder à du code provenant d'un *autre* fichier source. | Ou: accéder à du code provenant d'un *autre* fichier source. | ||||
Créons un fichier `bonjour.py` contenant seulement une assignation | Créons un fichier `bonjour.py` contenant seulement une assignation | ||||
d'une variable `a` à l'entier 42 :: | |||||
de l'entier 42 à la variable `a`:: | |||||
# Dans bonjour.py | # Dans bonjour.py | ||||
a = 42 | a = 42 | ||||
@@ -38,7 +38,7 @@ on peut accéder à cette variable en *important* le module:: | |||||
Le nom du module est écrit directement, ce n'est *pas* une | Le nom du module est écrit directement, ce n'est *pas* une | ||||
chaîne de caractères. | chaîne de caractères. | ||||
On voit que l'assignation de la variable `a` dans `bonjour.py` est devenue | |||||
On voit que la variable `a` dans `bonjour.py` est devenue | |||||
un *attribut* du module `bonjour` lorsque `bonjour` a été importé | un *attribut* du module `bonjour` lorsque `bonjour` a été importé | ||||
@@ -66,7 +66,7 @@ Il est important de noter que: | |||||
* mais il n'est *pas* ré-éxécuté si le module a déjà été importé auparavant. | * mais il n'est *pas* ré-éxécuté si le module a déjà été importé auparavant. | ||||
On peut le voir en mettant du code dans `bonjour.py`, | On peut le voir en mettant du code dans `bonjour.py`, | ||||
en plus des simples définitions de fonctions et assignations | |||||
en plus des simples définitions de fonctions et de créations | |||||
de variables:: | de variables:: | ||||
# Dans bonjour.py | # Dans bonjour.py | ||||
@@ -6,14 +6,11 @@ Introduction | |||||
Reprenons ce qu'on a vu jusqu'ici. | Reprenons ce qu'on a vu jusqu'ici. | ||||
D'une part, on peut créer des variables en les assignant à une valeur:: | |||||
D'une part, on peut créer des variables en assignant des valeurs à celles-ci:: | |||||
# Création d'une variable `x` avec la valeur 4 | # Création d'une variable `x` avec la valeur 4 | ||||
x = 4 | x = 4 | ||||
On dit aussi que ``x`` *référence* la valeur ``4`` | |||||
D'autre part, on peut définir et appeler des fonctions:: | D'autre part, on peut définir et appeler des fonctions:: | ||||
# Définition de la fonction: | # Définition de la fonction: | ||||
@@ -29,7 +26,9 @@ D'autre part, on peut définir et appeler des fonctions:: | |||||
Fonctions en tant que variables | Fonctions en tant que variables | ||||
------------------------------- | ------------------------------- | ||||
Il se trouve qu'en Python, on peut assigner des variables à ... des fonctions | |||||
Il se trouve qu'en Python, on peut assigner des fonctions à des | |||||
variables. C'est différent d'assigner le résultat de l'appel à une | |||||
fonction à une variable, et ça permet de retarder l'appel: | |||||
.. code-block:: python | .. code-block:: python | ||||
@@ -41,10 +40,11 @@ Il se trouve qu'en Python, on peut assigner des variables à ... des fonctions | |||||
def dire_bonjour_en_anglais(nom): | def dire_bonjour_en_anglais(nom): | ||||
print("Hello " + nom) | print("Hello " + nom) | ||||
# Création d'une variable qui référence la fonction française: | |||||
# Assigne une fonction à la variable - aucune fonction | |||||
# n'est appelée à ce stade. | |||||
ma_fonction_qui_dit_bonjour = dire_bonjour_en_français | ma_fonction_qui_dit_bonjour = dire_bonjour_en_français | ||||
# Appel de la fonction: | |||||
# Appel de la fonction (retardé) | |||||
ma_fonction_qui_dit_bonjour("Max") | ma_fonction_qui_dit_bonjour("Max") | ||||
# Affiche: Bonjour Max | # Affiche: Bonjour Max | ||||
@@ -53,11 +53,11 @@ Il se trouve qu'en Python, on peut assigner des variables à ... des fonctions | |||||
De façon cruciale, notez que l'on n'a *pas* mis de parenthèses à droite | De façon cruciale, notez que l'on n'a *pas* mis de parenthèses à droite | ||||
lorsqu'on a créé la variable `ma_fonction_qui_dit_bonjour`. | lorsqu'on a créé la variable `ma_fonction_qui_dit_bonjour`. | ||||
On peut donc dire que lorsqu'on définit une fonction avec `def()` et un corps | |||||
On peut donc dire que lorsqu'on définit une fonction avec ``def ma_fonction()`` et un corps: | |||||
il y a en réalité deux étapes: | il y a en réalité deux étapes: | ||||
1. Python stocke le corps de la fonction quelque part | 1. Python stocke le corps de la fonction quelque part | ||||
2. Il crée une variable qui référence ce corps | |||||
2. Il assigne le corps de celle-ci à une variable dont le nom est ``ma_fonction``. | |||||
En Python, il est assez fréquent d'utiliser de code tel que celui-ci, souvent avec un dictionnaire:: | En Python, il est assez fréquent d'utiliser de code tel que celui-ci, souvent avec un dictionnaire:: | ||||
@@ -79,10 +79,9 @@ En Python, il est assez fréquent d'utiliser de code tel que celui-ci, souvent a | |||||
Fonctions en tant qu'argement d'autres fonctions | Fonctions en tant qu'argement d'autres fonctions | ||||
------------------------------------------------ | ------------------------------------------------ | ||||
On a vu en début de chapitre qu'on peut créé des variables qui référencent | |||||
des fonctions. | |||||
On a vu en début de chapitre qu'on peut assigner des fonctions à des variables. | |||||
Du coup, rien n'empêche de les passer en *argument* d'autres fonctions. | |||||
Du coup, rien n'empêche de passer des fonctions en *argument* d'autres fonctions. | |||||
Par exemple:: | Par exemple:: | ||||