25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

python-04.md 3.4 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. % Programmation avec Python (chapitre 4)
  2. % Dimitri Merejkowsky
  3. \center \huge Les tuples
  4. # Création de tuples
  5. ```python
  6. mon_tuple = tuple() # un tuple vide
  7. mon_tuple = () # aussi un tuple vide
  8. mon_tuple = (1, 2) # un tuple à deux éléments
  9. ```
  10. # Note
  11. C'est la virgule qui fait le tuple, pas les parenthèses
  12. (on n'utilise les parenthèses que pour l'esthétique)
  13. \vfill
  14. ```python
  15. (1)
  16. # pas un tuple, juste le nombre 1 (entre parenthèses)
  17. (1,)
  18. # un tuple à un élément
  19. 1,
  20. # le *même* tuple
  21. ```
  22. # Indexation, test d'appartenance
  23. ```python
  24. >>> couple = ('Starsky', 'Hutch')
  25. >>> couple[0]
  26. 'Starsky'
  27. >>> couple[1]
  28. 'Hutch'
  29. >>> couple[3]
  30. IndexError
  31. >>> 'Starsky' in couple
  32. True
  33. >>> 'Batman' in couple
  34. False
  35. ```
  36. Rien de nouveau en principe :p
  37. # Déstructuration
  38. Créer plusieurs variables en une seule ligne
  39. ```python
  40. >>> couple = ("Batman", "Robin")
  41. >>> héro, side_kick = couple
  42. >>> héro
  43. 'Batman'
  44. >>> side_kick
  45. 'Robin'
  46. ```
  47. On dit aussi: unpacking
  48. # Quelques erreurs
  49. ```python
  50. >>> héro, side_kick, ennemi = couple
  51. ValueError (3 != 2)
  52. >>> (héro,) = couple
  53. ValueError (1 != 2)
  54. # Gare à la virgule:
  55. >>> héro, = couple
  56. ValueError (1 != 2)
  57. ```
  58. # Pièges
  59. ```python
  60. f(a, b, c) # appelle f() avec trois arguments
  61. f((a, b, c)) # appelle f() avec un seul argument
  62. # (qui est lui-même un tuple à 3 valeurs)
  63. ```
  64. # On peut aussi déstructurer des listes
  65. ```python
  66. >>> fruits = ["pomme", "banane", "orange"]
  67. >>> premier, deuxième, troisième = fruits
  68. ```
  69. # Retour multiple
  70. Retourner plusieurs valeurs:
  71. ```python
  72. def tire_carte(():
  73. valeur = "10"
  74. couleur = "trèfle"
  75. return (valeur, couleur)
  76. (v, c) = tire_carte()
  77. print("{} de {}", v, c)
  78. # 10 de trèfle
  79. ```
  80. \vfill
  81. En fait c'est juste une manipulation de tuples :)
  82. # Les tuples sont immuables
  83. ```python
  84. >>> couple = ('Starsky', 'Hutch')
  85. >>> couple[0] = 'Batman'
  86. TypeError
  87. ```
  88. Les méthodes `count()` et `index()` existent
  89. parce qu'elles ne modifient pas le tuple.
  90. # Les tuples sont immuables (2)
  91. Les méthodes qui modifieraient le tuple n'existent pas:
  92. ```python
  93. >>> couple = ('Starsky', 'Hutch')
  94. >>> couple.clear()
  95. AttributeError
  96. ```
  97. #
  98. \center Mutables, immuables, et références
  99. # Mutables et immuables
  100. * Mutables: listes, ensembles, dictionnaires
  101. * Immuables: entiers, flottants, booléens, strings
  102. # Passage par référence
  103. En Python, on ne manipule jamais les objets directement, on
  104. ne manipule que des *références* sur ces objets.
  105. ```python
  106. x = 3 # x est une référence vers l'objet 'entier 3'
  107. x = "hello" # x référence une string
  108. ```
  109. # Exemple 1
  110. ```python
  111. def ajoute_trois(x):
  112. x = x + 3 # crée une nouvelle référence
  113. mon_entier = 42
  114. ajoute_trois(mon_entier)
  115. # 'mon_entier' vaut toujours 42
  116. ```
  117. # Exemple 2
  118. ```python
  119. def ajoute_trois(l):
  120. l.append(3)
  121. # Ne crée pas de nouvelle référence
  122. # Appelle une méthode qui modifie 'l' sur place
  123. ma_liste = [1, 2]
  124. ajoute_trois(ma_liste)
  125. # 'ma_liste' vaut maintenant [1, 2, 3]
  126. ```
  127. # Exemple 3
  128. ```python
  129. def get_max(liste):
  130. autre_liste = liste.copy()
  131. autre_liste.sort()
  132. return autre_liste[-1]
  133. ma_liste = [1, 3, 2]
  134. x = get_max(ma_liste)
  135. # x = 3
  136. # `ma_liste` n'a pas changé
  137. ```
  138. # Notes
  139. * on peut aussi utiliser la fonction native "max()"
  140. * on peut aussi utiliser une slice: `autre_liste = liste[:]`
  141. # Conclusion
  142. Une fonction ne peut modifier la valeur de ses arguments qui s'ils sont
  143. mutables.
  144. Toutes les copies doivent être explicites