Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
To repozytorium jest zarchiwizowane. Możesz wyświetlać pliki i je sklonować, ale nie możesz do niego przepychać zmian lub otwierać zgłoszeń/Pull Requestów.

python-S02-E06.md 4.8 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. % Programmation avec Python (chapitre 6)
  2. % Dimitri Merejkowsky
  3. #
  4. \center \huge Modules
  5. # Un fichier = un module
  6. À un fichier `mon_module.py` correspond _toujours_ un module `mon_module`.
  7. (La réciproque n'est pas vraie)
  8. # Code dans un module
  9. ```python
  10. # Dans bonjour.py
  11. a = 42
  12. ```
  13. Le module `bonjour` contient contient un *attribut* `a`
  14. dont la valeur est 42.
  15. # Importer un module
  16. Avec le mot-clé `import`, suivi du nom du module,
  17. _sans guillemets_.
  18. ```python
  19. $ python
  20. >>> import bonjour
  21. >>> bonjour.a
  22. 42
  23. ```
  24. # Une fonction dans un module
  25. ```python
  26. # toujours dans bonjour.py
  27. a = 42
  28. def dire_bonjour():
  29. print("Bonjour!")
  30. ```
  31. # Appeler une fonction depuis un module
  32. ```python
  33. >>> import bonjour
  34. >>> bonjour.dire_bonjour()
  35. Bonjour!
  36. ```
  37. **note**: différent de `python3 bonjour.py`.
  38. # Interaction - 1
  39. ```python
  40. >>> import bonjour
  41. >>> bonjour.dire_bonjour()
  42. Bonjour!
  43. >>> bonjour.dire_bonjour()
  44. Bonjour!
  45. ```
  46. # Interaction - 2
  47. ```python
  48. >>> import bonjour
  49. >>> bonjour.a
  50. 42
  51. >>> bonjour.a = 36
  52. >>> bonjour.a
  53. 36
  54. ```
  55. # Les imports ne sont faits qu'une seule fois
  56. ```python
  57. # Dans bonjour.py
  58. print("Je suis le module bonjour!")
  59. ```
  60. ```python
  61. >>> import bonjour
  62. Je suis le module bonjour!
  63. >>> import bonjour
  64. <rien>
  65. ```
  66. # La bibliothèque standard
  67. La bibliothèque standard est une collection de modules directement utilisables fournis à l'installation de Python.
  68. Exemple: `sys`, `random`, ...
  69. Toute la bibliothèque standard est documentée - et la traduction en Français est en cours:
  70. https://docs.python.org/fr/3/library/index.html
  71. Mettez ce lien dans vos favoris - il vous sera très utile.
  72. # sys
  73. Contient notamment `sys.argv`, une liste de chaînes de caractères, qui
  74. n'est *jamais vide*.
  75. Dans l'interpréteur intéractif, le premier élément est le
  76. chemin du binaire python:
  77. ```bash
  78. $ python3
  79. >>> import sys
  80. >>> sys.argv
  81. ["/usr/bin/python3"]
  82. ```
  83. # sys.argv avec un fichier
  84. ```python
  85. # Dans lancez_moi.py
  86. import sys
  87. def main():
  88. print(sys.argv)
  89. ```
  90. \vfill
  91. Le premier élément est alors le nom du fichier:
  92. ```bash
  93. $ python3 lancez_moi.py
  94. ["lancez_moi.py"]
  95. ```
  96. # sys.argv avec un fichier - 2
  97. Si on rajoute des mots après le nom du fichier, ils apparaissent dans `sys.argv`:
  98. ```python
  99. # dans lancez_moi.py
  100. import sys
  101. def main():
  102. print(sys.argv)
  103. ```
  104. \vfill
  105. ```bash
  106. $ python3 lancez_moi.py un deux trois
  107. ["lancez_moi.py", "un", "deux", "trois"]
  108. ```
  109. # Les scripts Python
  110. Pour interagir avec l'utilisateur, on a souvent utilisé `input()`, passer par
  111. `sys.argv` est plus commun.
  112. Exemple:
  113. ```bash
  114. $ python3 faire_le_café
  115. $ python3 faire_le_café --sans-sucre
  116. ```
  117. #
  118. \center \huge QCM
  119. #
  120. ```python
  121. def dire_bonjour():
  122. return "Bonjour"
  123. x = dire_bonjour()
  124. print(x)
  125. ```
  126. 1. Erreur
  127. 2. Affiche "Bonjour"
  128. \pause
  129. Réponse: 2
  130. #
  131. ```python
  132. def dire_bonjour():
  133. print("Bonjour")
  134. x = dire_bonjour()
  135. print(x)
  136. ```
  137. 1. Erreur
  138. 2. Affiche "Bonjour"
  139. 3. Affiche 'None"
  140. \pause
  141. Réponse: 3 - pas de return, la fonction
  142. renvoie None
  143. #
  144. ```python
  145. def dire_bonjour():
  146. return "Bonjour"
  147. dire_bonjour()
  148. ```
  149. 1. N'affiche rien
  150. 2. Affiche "Bonjour"
  151. 3. Affiche 'None"
  152. \pause
  153. Réponse 1 - la fonction renvoie une valeur, mais
  154. on n'en fait rien.
  155. #
  156. ```python
  157. # Dans mon_module.py
  158. ma_variable = 42
  159. ```
  160. ```python
  161. >>> import "mon_module"
  162. >>> print(ma_variable)
  163. ```
  164. 1. Erreur
  165. 2. Affiche '42'
  166. \pause
  167. Réponse 1: les noms de modules ne sont pas des strings!
  168. #
  169. ```python
  170. # Dans mon_module.py
  171. ma_variable = 42
  172. ```
  173. ```python
  174. >>> import mon_module
  175. >>> print(ma_variable)
  176. ```
  177. 1. Erreur
  178. 2. Affiche '42'
  179. \pause
  180. Réponse 1: `ma_variable` est un *attribut* de `mon_module`.
  181. #
  182. ```python
  183. # Dans mon_module.py
  184. ma_variable = 42
  185. ```
  186. ```python
  187. >>> import mon_module
  188. >>> mon_module.ma_variable = 43
  189. >>> mon_module.ma_variable
  190. ```
  191. 1. Erreur
  192. 2. Affiche '43'
  193. \pause
  194. Réponse 2: on peut lire et écrire les attributs des modules
  195. importés!
  196. #
  197. ```python
  198. # Dans mon_script.py
  199. print(sys.argv[0])
  200. ```
  201. ```bash
  202. $ python mon_script mon_argument
  203. ```
  204. 1. Erreur
  205. 2. Affiche 'mon_script'
  206. \pause
  207. Réponse 1: il faut donner le vrai nom du fichier!
  208. #
  209. ```python
  210. # Dans mon_script.py
  211. print(sys.argv[0])
  212. ```
  213. ```bash
  214. $ python mon_script.py mon_argument
  215. ```
  216. 1. Erreur
  217. 2. Affiche 'mon_script'
  218. \pause
  219. Réponse 1: il faut importer `sys` avant de pouvoir l'utiliser
  220. #
  221. ```python
  222. # Dans mon_script.py
  223. import sys
  224. print(sys.argv[0])
  225. ```
  226. ```bash
  227. $ python mon_script.py mon_argument
  228. ```
  229. 1. Erreur
  230. 2. Affiche 'mon_argument'
  231. \pause
  232. C'est un piège! `argv[0]` est le chemin du script!
  233. #
  234. ```python
  235. # Dans mon_script.py
  236. import sys
  237. print(sys.argv[1])
  238. ```
  239. ```bash
  240. $ python mon_script.py mon_argument
  241. ```
  242. 1. Erreur
  243. 2. Affiche 'mon_argument'
  244. \pause
  245. Réponse 2 :)
  246. #
  247. ```python
  248. # Dans mon_script.py
  249. import sys
  250. print(sys.argv[1])
  251. ```
  252. ```bash
  253. $ python mon_script.py
  254. ```
  255. 1. Erreur
  256. 2. Affiche 'mon_script.py'
  257. \pause
  258. Réponse 1. `argv` a une taille 1, et on accède à l'index 1.
  259. #
  260. \center \huge Atelier