|
@@ -1,30 +1,34 @@
|
|
|
Voici maintenant un exemple de fonction en Python (crée le fichier `02-fonctions.py`) :
|
|
Voici maintenant un exemple de fonction en Python (crée le fichier `02-fonctions.py`) :
|
|
|
|
|
|
|
|
```python
|
|
```python
|
|
|
-def count_words(str):
|
|
|
|
|
- return len(str.split(' '))
|
|
|
|
|
-
|
|
|
|
|
-message = "The show must go on!"
|
|
|
|
|
-print("Nombre de mots dans '%s' : %d" % (message, count_words(message)))
|
|
|
|
|
|
|
+# Salue quelqu'un en utilisant son titre
|
|
|
|
|
+def greet(name, gender=''):
|
|
|
|
|
+ if gender == 'male':
|
|
|
|
|
+ title = 'Mr'
|
|
|
|
|
+ elif gender == 'female':
|
|
|
|
|
+ title = 'Ms'
|
|
|
|
|
+ else:
|
|
|
|
|
+ title = 'Mx' # titre "neutre"
|
|
|
|
|
+ print("Hello %s %s" % (title, name))
|
|
|
|
|
+
|
|
|
|
|
+greet("Johnson", "male")
|
|
|
|
|
+greet("May", "female")
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-La fonction `count_words()` prend en paramètre une chaîne de caractères. Elle utilise la méthode `split()` accessibles aux chaînes (qui sont des objets !). Celle-ci fonctionne comme `split()` en JavaScript : elle sépare la chaîne selon le séparateur passé en paramètre, et renvoie une "liste" (l'équivalent des tableaux).
|
|
|
|
|
|
|
+Pour saluer (*greet*) une personne, on utilise le "titre honorifique" suivi du nom. Le titre est déterminé à partir du genre.
|
|
|
|
|
|
|
|
-Ensuite la fonction `len()` compte le nombre d'éléments dans la liste.
|
|
|
|
|
|
|
+Remarques :
|
|
|
|
|
|
|
|
-Remarque ensuite ce qu'on met en arguments de `print()`. La partie entre guillemets ressemble à ce qu'on pourrait trouver en C ou en Java : `%s` et `%d` sont des "emplacements" pour des variables (chaîne et entier respectivement). Par contre, la syntaxe de la suite diffère : les valeurs à insérer dans les emplacements sont situées entre parenthèses, suite au caractère `%`.
|
|
|
|
|
|
|
+> On définit une fonction en précédant son nom du mot-clé `def`.
|
|
|
|
|
|
|
|
-Pour terminer, le plus important à retenir de cet exemple... Voici comment on aurait écrit `count_words()` en JS :
|
|
|
|
|
|
|
+> Python **n'utilise pas** la syntaxe `{}`, commune à C/C++, Java, PHP, JavaScript, etc. pour ouvrir et fermer le corps d'une fonction (ou un bloc de code en général)
|
|
|
|
|
|
|
|
-```javascript
|
|
|
|
|
-function count_words(str) {
|
|
|
|
|
- return str.split(' ').length;
|
|
|
|
|
-}
|
|
|
|
|
-```
|
|
|
|
|
|
|
+> Au lieu de cela, on ouvre un bloc de code en utilisant `:` et en laissant **au moins un espace d'indentation** au début de chaque ligne du bloc. Toutes les lignes d'un *même bloc* doivent avoir le même *niveau* d'indentation (même nombre d'espaces avant)
|
|
|
|
|
+
|
|
|
|
|
+Cette dernière particularité de Python est absolument fondamentale ! Python se base sur l'*indentation* pour détecter ce qui appartient à un même bloc.
|
|
|
|
|
|
|
|
-Tu vois les différences ?
|
|
|
|
|
-> Python **n'utilise pas** la syntaxe `{}` pour ouvrir et fermer le corps d'une fonction (ou un bloc de code en général)
|
|
|
|
|
|
|
+> Essaie de voir ce qui se passe en "désindentant" la ligne `title = 'Mr'` pour la ramener au niveau du `if` qui la précède. **Tu risques de rencontrer cette erreur à nouveau si tu n'es pas rigoureux sur l'indentation**.
|
|
|
|
|
|
|
|
-> Au lieu de cela, on ouvre un bloc de code en utilisant `:` et **en laissant 4 espaces d'indentation** au début de chaque ligne du bloc.
|
|
|
|
|
|
|
+Un avantage d'abandonner les `{}` est que le code est moins "chargé" visuellement. Il n'y a pas d'*obligation* quant au nombre d'espaces d'indentation, mais une *convention* très répandue, qu'en pratique tout le monde adopte, préconise l'usage de 4 espaces entre chaque niveau d'indentation (vrais espaces et non tabulation).
|
|
|
|
|
|
|
|
-Cette dernière différence est absolument fondamentale ! Python se base sur l'*indentation* pour détecter ce qui appartient à un bloc.
|
|
|
|
|
|
|
+Dernière chose, les arguments de `print()` : La partie entre guillemets ressemble à ce qu'on pourrait trouver en C ou en Java : `%s` et `%d` sont des "emplacements" pour des variables (chaîne et entier respectivement). Par contre, la syntaxe de la suite diffère : les valeurs à insérer dans les emplacements sont situées entre parenthèses, suite au caractère `%`.
|