Outils pour utilisateurs

Outils du site


dev:python:start

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:python:start [2020/09/23 10:15] yoanndev:python:start [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1
Ligne 5: Ligne 5:
 Quelques notes à propos des spécificités du langage Python basées sur mes écueils. Quelques notes à propos des spécificités du langage Python basées sur mes écueils.
  
-===== Interpréteurs =====+Python a été conçu avec l'objectif d'être lisible, compréhensible faciitant son accès et les échanges de codes. Les choix de conceptions ont été guidés par pragmatisme et non par dogmatisme.
  
-**ipython** est interpréteur proposant des couleurs et de l'autocomplétion. Il offre un mode interactif plus user friendly.+Langage portable avec une grosse base de code: calcul scientifique, traitement de données, web, embarqué etc. 
 + 
 +Python permet de devélopper/ concevoir rapidement (PoC): 
 +  * types de base puissants (listes, dictionnaires, ensembles etc) 
 +  * gestion automatique de la mémoire 
 +  * langage interprété et EDI divers (notebooks IDLE etc) 
 + 
 +===== Droits et licences ===== 
 + 
 +Python appartient a la PSF (Python Software Fondation) qui est une organisation à but non lucratif. La licence est permissive et permet de l'utiliser à des fins commerciales. 
 + 
 +===== Évolution du langage ===== 
 + 
 +Toute proposition concernant l'évolution du langage est débattue démocratiquement au travers des PEPs puis tranchée par le BDFL((Benevolent Dictator For Life)) qui se traduit par Dictateur bienveillant à vie. 
 + 
 +===== Bref historique ===== 
 + 
 +Première version python 1.0 sortie en 1994. Version 2 en 2000. Grosse rupture de compatibilité entre la version 2 et la version 3. Langage stable et maintenu. 
 + 
 + 
 +Librairie standard: ensemble des utilitaires packagés, distribués et maintenus avec Python. 
 + 
 +===== EDI et Interpréteurs ===== 
 + 
 +IDLE (prononcer Aïdeul) est l'EDI proposé par la librairie standard mais il existe de nombreux EDI supportant python on pourra citer: PyCharm,Syder,Emacs etc 
 + 
 +**ipython** est interpréteur proposant des couleursde l'autocomplétion, une documentation en ligne. Il offre un mode interactif plus user friendly que l’interpréteur python original.
  
 <code bash> <code bash>
 $ sudo apt-get install ipython $ sudo apt-get install ipython
 +
 +# ou sous les versions plus récentes de Debian/xUbuntu
 +$ sudo apt-get install ipython3
 </code> </code>
 +
 +Pour plus de détails concernant l'installation voir le wiki [[dev:python:core:installer_interpreteurs]]. 
  
 ===== Jeux de caractères ===== ===== Jeux de caractères =====
Ligne 36: Ligne 67:
 ./monscript.py ./monscript.py
 </code> </code>
 +===== Variables =====
 +
 +Une variable référence un objet. Python gère deux espaces:
 +  * l'espace de nom
 +  * l'espace des objets
 +
 +Lors d'une déclaration telle que:
 +<code python>
 +>>> msg = 'Bonjour!'
 +</code>
 +
 +3 étapes:
 +  * L'objet de type str avec la valeur 'Bonjour!' est instancié dans l'espace des objets.
 +  * Création de la variable "msg" dans l'espace des variables.
 +  * La référence vers l'objet est associé à la variable "msg".
 +
 +**La valeur de toute variable est une référence à un objet**. Le typage est dynamique mais le langage est fortement typé. En python le type n'est pas lié à la variable qui référence l'objet mais il est lié à l'objet. L'objet garde son type durant toute l’exécution du programme. La variable par contre peut référencer différents objets qui vont  
 +
 +En python les noms des variables ne peuvent pas commencer par un chiffre. Le nom se compose des caractères alphanumériques sans caractères spéciaux. Les noms sont sensibles à la casse de caractère.
 +
 +<note>
 +Prendre l'habitude de nommer correctement ses variables avec des labels explicites. Python intègre un système de génération automatique de la documentation à partir du code.
 +</note>
 +
 +Par convention les variables sont en minuscules. Par convention également les variables "privées" sont préfixées par le caractère tiret bas '_' (confère PEP 008 http://legacy.python.org/dev/peps/pep-0008/#descriptive-naming-styles).
 +
 +Dans tous les cas il est fortement déconseillé d'utiliser le formalisme **%%__variable__%%** car utilisé par le langage.
  
 ===== Types de base ===== ===== Types de base =====
  
-En Python tout est objet, le type d'une variable est déterminé dynamiquement, pas de déclaration avant l'utilisation. La fonction **type()** renvoi le type de l'objet passé en paramètre:+En Python tout est objet. Le type d'une variable est déterminé dynamiquement, pas de déclaration de variable avant l'utilisation. La fonction **type()** renvoi le type de l'objet passé en paramètre: 
 +Le type est important puisqu'il détermine quelles méthodes peuvent être appelées, quel comportement peut avoir l'objet. Parmi les types de base (built-in types) ont distingue les types mutables et les types immuables: 
 + 
 +^ Type        ^ Mutablilité | 
 +| int, float   | immuable    |    
 +| complex,bool | immuable    | 
 +| str        | immuable    | 
 +| list        | mutable     | 
 +| dict        | mutable     | 
 +| set          | mutable     | 
 +| frozenset    | immuable    | 
 + 
 +Un objet mutable peut être modifié en place. Un objet immuable ne peut être modifié, python doit réallouer un espace mémoire différent et mettre à jour la référence.
  
 <code python> <code python>
Ligne 64: Ligne 134:
  
 Remarques: Remarques:
-  - La fonction **type()** retourne le type de la variable passée en paramètre.+  - La fonction **type()** retourne le type de l'objet référencé par la variable passée en paramètre.
   - Python ne distingue pas caractère et chaîne de caractères, le type est 'str' (string).   - Python ne distingue pas caractère et chaîne de caractères, le type est 'str' (string).
 +
 +La fonction **isinstance()** est plus largement utilisée pour la mise en œuvre des mécanismes d'héritage. Elle permet de savoir si un objet est d'un type donné.
 +
 +De plus comme python est un langage à typage dynamique, isinstance() permet de s'assurer qu'une variable passée à une fonction à l’exécution est du type attendu, puisque contrairement à un langage typé statiquement, aucune garantie ne peut être apportée en amont.
 +
 +<note>
 +Depuis python 3.5 les **Type hints** ou annotations de types permettent d'expliciter les suppositions qui sont faites par le programmeur pour le bon fonctionnement de son code. Totalement optionnelles et meme si elles sont présentes elles ne sont pas utilisées à l'exécution par l'interpréteur. Cependant elles permettent a des outils externes comme mypy d'effectuer des contrôles poussés de correction de code.
 +</note>
  
 ==== La liste ==== ==== La liste ====
Ligne 86: Ligne 164:
 </code> </code>
  
-Notes plus détaillées à propos des [[dev:python:listes|listes en Python]].+Notes plus détaillées à propos des [[dev:python:core:listes|listes en Python]]. 
 ==== Le tuple ==== ==== Le tuple ====
  
-Le tuple est un ensemble ordonné et figé d'objets pouvant être de types différents. On ne peut pas ajouter/supprimer/modifier les éléments d'un tuple. Le principal avantage d'un tuple est le temps d’accès à l'information bien plus court que la liste.+Le tuple est un objet séquence très proche de la liste, sa principale différence est d'être immuable. Le tuple contient un ensemble ordonné et figé d'objets pouvant être de types différents. On ne peut pas ajouter/supprimer/modifier les éléments d'un tuple. Le principal avantage d'un tuple est le temps d’accès à l'information bien plus court que la liste.
  
 <code python> <code python>
Ligne 139: Ligne 218:
 >>> print(sous_chaine) >>> print(sous_chaine)
 etxet iloj nu etxet iloj nu
- 
- 
 </code> </code>
 +
 +Notes plus détaillées à propos des [[dev:python:core:tuples|tuples]].
  
 ==== Le dictionnaire ==== ==== Le dictionnaire ====
  
-Un dictionnaire est un ensemble dynamique non ordonné (on parle aussi de tableau associatif). On accède aux élément via la clé. Une clé peut être une chaîne de caractères ou un nombre.+Un dictionnaire est un ensemble dynamique non ordonné (on parle aussi de tableau associatif). On accède aux élément via la clé.
  
 <code python> <code python>
Ligne 153: Ligne 232:
  
 Remarque: Pour copier un dictionnaire utiliser la méthode **copy()** Remarque: Pour copier un dictionnaire utiliser la méthode **copy()**
 +
 +Confère wiki [[dev:python:core:type_dictionnaire|dictionnaires]] pour plus de détails.
  
 ===== Définition d'un objet ===== ===== Définition d'un objet =====
Ligne 200: Ligne 281:
   * **eval()** pour évaluer une chaîne de caractères   * **eval()** pour évaluer une chaîne de caractères
  
 +<code python>
 +
 +>>> # La variable c1 référence un objet str
 +>>> c1 = 'say'
 +
 +>>> # création d'une variable c2 référencant le meme objet
 +>>> c2 = c1
 +
 +>>> c2 is c1
 +True
 +
 +>>> print(f"adresse c1: {id(c1):0x}"                                                         
 +adresse c1: 7fc861d4b0b0
 +
 +>>> print(f"adresse c2: {id(c2):0x}"                                                         
 +adresse c2: 7fc861d4b0b0
 +
 +>>> # Comme un objet str est immuable la concaténation 
 +>>> # ci-dessous produit une nouvelle référence associée a c1
 +c1 += ' hello'
 +
 +>>> c2 is c1                                                                                   
 +False
 +
 +>>> print(f"adresse c1: {id(c1):0x}"                                                         
 +adresse c1: 7fc8535cf6b0
 +</code>
  
 ===== Import et modules ===== ===== Import et modules =====
Ligne 235: Ligne 343:
 ===== La documentation ===== ===== La documentation =====
  
-Python intègre nativement la documentation au code (attribut __doc__ d'une instance). Lors de la définition d'une classe ou d'une méthode, ajouter un texte entre triple guillemets sous la définition pour qu'elle soit prise en compte.+Python intègre nativement la documentation au code (c'est la documentation en ligne contenue dans l'attribut __doc__ d'une instance). Lors de la définition d'une classe ou d'une méthode, ajouter un texte entre triple guillemets sous la définition pour qu'elle soit intégrée (c'est la "doc string")
  
 Remarque: La position du commentaire est importante. Seuls les commentaires entre triples guillemets sous la déclaration seront exportés. Attention a bien indenter le commentaire. Remarque: La position du commentaire est importante. Seuls les commentaires entre triples guillemets sous la déclaration seront exportés. Attention a bien indenter le commentaire.
  
-Pour obtenir de l'aide, depuis l'interpreteur utiliser la commande **help()**, cela fonctionne meme sur les types de base:+Pour obtenir de l'aide, depuis l’interpréteur utiliser la commande **help()**, cela fonctionne meme sur les types de base:
 <code python> <code python>
 help(str) help(str)
 +</code>
 +
 +La commande **dir()** permet de lister les symboles existants au sein d'un module:
 +<code python>
 +>>> import math
 +>>> dir(math)
 +'__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
 +>>>
 </code> </code>
  
dev/python/start.1600856133.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)