# Référence de syntaxe Python
Table of Contents
Python est un langage de programmation de haut niveau et interprété. Ce guide couvre les concepts essentiels pour les développeurs qui migrent vers Python ou cherchent une référence complète.
Installation
Linux (Debian/Ubuntu)
sudo apt updatesudo apt install python3 python3-pippython3 --version # Vérifier l'installationmacOS
brew install pythonWindows
Téléchargez depuis python.org. Assurez-vous de cocher “Ajouter au PATH” pendant l’installation.
python --version # Vérifier l'installationpip --version # Gestionnaire de paquetsSyntaxe de Base
Fonction Print
Afficher des données dans le terminal avec diverses options de formatage.
print("Hello, World!")print("Value: ", 42)print("Multiple", "values", "separated")
# Sortie formatéename, age = "Alice", 25print(f"Name: {name}, Age: {age}")print("Name: {}, Age: {}".format(name, age))
# Contrôler le comportement de sortieprint("No newline", end="")print(" continues here")print("Item1", "Item2", sep=" | ") # Séparateur personnaliséCommentaires
Documenter le code avec des commentaires sur une ligne ou multi-lignes.
# Commentaire sur une ligneprint("Hello, World!") # Commentaire en ligne
"""Commentaire multi-lignes (docstring)Utilisé pour des explications détailléesou la documentation de fonctions"""
'''Syntaxe multi-lignes alternativeutilisant des guillemets simples'''Variables
Le typage dynamique permet aux variables de changer de type. Aucune déclaration explicite n’est nécessaire.
# Assignation de basea = 5name = "Alice"
# Assignation multipleb, c = 1, 2x = y = z = 0
# Échanger les variablesa, b = b, a
# Changements de type autorisésa = 5 # inta = "Hello" # maintenant stringa = [1, 2] # maintenant list
# Constantes (convention : majuscules)PI = 3.14159MAX_SIZE = 100Types de Données
Python prend en charge plusieurs types de données intégrés avec inférence automatique.
# Types numériquesx = 5 # inty = 3.14 # floatz = 2 + 3j # nombre complexe
# Booléenis_valid = True # bool (True/False)is_empty = False
# Chaînesname = "Alice" # strtext = 'Single quotes work too'multiline = """Line oneLine twoLine three"""
# Type Nonevalue = None # NoneType
# Vérification et conversion de typeprint(type(x)) # <class 'int'>print(isinstance(x, int)) # True
# Conversion de typestr(42) # "42"int("42") # 42float("3.14") # 3.14bool(1) # Truebool(0) # FalseManipulation de Données
Opérations sur les Chaînes
Manipulation complète des chaînes avec découpage, formatage et méthodes.
text = "Hello World!"
# Découpage [début:fin:pas]text[0:5] # "Hello"text[6:] # "World!"text[:5] # "Hello"text[-1] # "!"text[-6:-1] # "World"text[::2] # "HloWrd"
# Formatage de chaînesname = "Alice"age = 30greeting = f"Hello, {name}. You are {age}."formatted = "Hello, {}. You are {}.".format(name, age)old_style = "Hello, %s. You are %d." % (name, age)
# Méthodes de chaîneslen(text) # 12text.upper() # "HELLO WORLD!"text.lower() # "hello world!"text.title() # "Hello World!"text.strip() # Supprimer les espacestext.replace("World", "Python") # "Hello Python!"
# Test de chaînestext.startswith("Hello") # Truetext.endswith("!") # Truetext.isdigit() # False"123".isdigit() # True
# Division et jointurewords = text.split() # ["Hello", "World!"]" ".join(words) # "Hello World!""Hello,World,Python".split(",") # ["Hello", "World", "Python"]
# Alignementtext.ljust(15) # "Hello World! "text.rjust(15) # " Hello World!"text.center(15) # " Hello World! "Opérations Numériques
Opérations arithmétiques et fonctions mathématiques.
a, b = 10, 3
# Arithmétique de basec = a + b # 13 Additionc = a - b # 7 Soustractionc = a * b # 30 Multiplicationc = a / b # 3.333... Division (float)c = a // b # 3 Division entière (int)c = a % b # 1 Modulo (reste)c = a ** b # 1000 Exponentiation
# Assignation composéec = 5c += 2 # c = c + 2, maintenant 7c -= 1 # c = c - 1, maintenant 6c *= 3 # c = c * 3, maintenant 18c /= 2 # c = c / 2, maintenant 9.0
# Fonctions intégréesabs(-5) # 5round(3.7) # 4round(3.7, 1) # 3.7min(1, 2, 3) # 1max(1, 2, 3) # 3sum([1, 2, 3]) # 6
# Module mathimport mathmath.sqrt(16) # 4.0math.ceil(3.2) # 4math.floor(3.8) # 3math.pi # 3.141592653589793Structures de Données
Listes
Collections ordonnées et modifiables supportant différents types de données.
# Créationfruits = ["apple", "banana", "cherry"]mixed = [1, "apple", 3.14, True]numbers = list(range(5)) # [0, 1, 2, 3, 4]empty = []
# Accès et découpagefirst = fruits[0] # "apple"last = fruits[-1] # "cherry"subset = fruits[1:3] # ["banana", "cherry"]
# Modificationfruits.append("orange") # Ajouter à la finfruits.insert(1, "blueberry") # Insérer à l'indexfruits.extend(["mango", "kiwi"]) # Ajouter plusieurs éléments
# Suppressionfruits.pop() # Supprimer et retourner le dernierfruits.pop(1) # Supprimer à l'indexfruits.remove("banana") # Supprimer la première occurrencedel fruits[0] # Supprimer par index
# Propriétés et recherchelen(fruits) # Compter les éléments"apple" in fruits # Vérifier l'appartenancefruits.index("cherry") # Trouver l'indexfruits.count("apple") # Compter les occurrences
# Tri et inversionnumbers = [3, 1, 4, 1, 5]numbers.sort() # [1, 1, 3, 4, 5] (sur place)sorted(numbers, reverse=True) # [5, 4, 3, 1, 1] (nouvelle liste)numbers.reverse() # Inverser sur place
# Compréhensions de listessquares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]evens = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]Tuples
Collections ordonnées et immuables idéales pour des jeux de données fixes.
# Créationcoordinates = (10.0, 20.0)point = 1, 2, 3 # Parenthèses optionnellessingle = (42,) # Élément unique nécessite une virguleempty = ()
# Accès (comme les listes)x = coordinates[0] # 10.0y = coordinates[1] # 20.0
# Déballagex, y = coordinates # x=10.0, y=20.0first, *rest = (1, 2, 3, 4) # first=1, rest=[2, 3, 4]
# Propriétéslen(coordinates) # 22 in (1, 2, 3) # True
# Cas d'utilisationrgb = (255, 128, 0) # Valeurs de couleurperson = ("Alice", 25, "Engineer") # Données de type enregistrementDictionnaires
Paires clé-valeur pour mapper des relations et structurer les données.
# Créationperson = { "name": "Alice", "age": 30, "city": "Wonderland"}empty = {}from_keys = dict.fromkeys(["a", "b"], 0) # {"a": 0, "b": 0}
# Accès et modificationname = person["name"] # "Alice"age = person.get("age", 0) # 30 (avec défaut)person["job"] = "Engineer" # Ajouter nouvelle cléperson["age"] = 31 # Mettre à jour existant
# Méthodeskeys = person.keys() # dict_keys(['name', 'age', 'city', 'job'])values = person.values() # dict_values(['Alice', 31, 'Wonderland', 'Engineer'])items = person.items() # Paires clé-valeur
# Appartenance et suppression"name" in person # Truedel person["city"] # Supprimer cléremoved = person.pop("job", None) # Supprimer et retourner
# Compréhensions de dictionnairessquares = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}filtered = {k: v for k, v in person.items() if len(str(v)) > 3}Ensembles (Sets)
Collections non ordonnées d’éléments uniques.
# Créationcolors = {"red", "green", "blue"}numbers = set([1, 2, 2, 3, 3]) # {1, 2, 3} - doublons supprimésempty = set() # {} crée un dict, pas un set
# Opérationscolors.add("yellow") # Ajouter élémentcolors.remove("red") # Supprimer (erreur si non trouvé)colors.discard("purple") # Supprimer (pas d'erreur si non trouvé)
# Opérations d'ensemblesset1 = {1, 2, 3}set2 = {3, 4, 5}union = set1 | set2 # {1, 2, 3, 4, 5}intersection = set1 & set2 # {3}difference = set1 - set2 # {1, 2}symmetric_diff = set1 ^ set2 # {1, 2, 4, 5}
# Test d'appartenance (très rapide)3 in colors # Truecolors.issubset({1, 2, 3, 4}) # Vérifier si sous-ensembleStructures de Contrôle
Instructions Conditionnelles
Exécuter du code basé sur des conditions booléennes avec if/elif/else.
x = 10
# Conditionnelles de baseif x > 0: print("Positive")elif x < 0: print("Negative")else: print("Zero")
# Opérateurs de comparaisonx == 5 # Égalx != 5 # Différentx > 5 # Supérieur àx >= 5 # Supérieur ou égal àx < 5 # Inférieur àx <= 5 # Inférieur ou égal à
# Opérateur ternaire (if en ligne)status = "positive" if x > 0 else "non-positive"
# Conditions multiplesif 0 < x < 100: # Comparaisons en chaîne print("Between 0 and 100")
# Valeurs vraies/faussesif []: # False (liste vide)if "": # False (chaîne vide)if 0: # False (zéro)if None: # Falseif [1, 2]: # True (liste non vide)Opérateurs Logiques
Combiner plusieurs conditions avec and, or, not.
x, y = 5, -3
# Opérateurs logiques de basex > 0 and y > 0 # False (les deux doivent être True)x > 0 or y > 0 # True (au moins un doit être True)not x > 0 # False (négation)
# Évaluation en court-circuitx > 0 and expensive_function() # expensive_function appelée seulement si x > 0
# Conditions complexesif (x > 0 and y > 0) or (x < 0 and y < 0): print("Same sign")
# Opérateurs d'identité et d'appartenancex is None # Vérification d'identitéx is not None"apple" in ["apple", "banana"] # Appartenance"grape" not in ["apple", "banana"]Boucles
Itérer sur des séquences et répéter l’exécution de code.
# Boucles for avec rangefor i in range(5): # 0, 1, 2, 3, 4 print(i)
for i in range(2, 8, 2): # 2, 4, 6 (début, fin, pas) print(i)
# Boucles for avec séquencesfruits = ["apple", "banana", "cherry"]for fruit in fruits: print(fruit)
# Enumerate pour index et valeurfor index, fruit in enumerate(fruits): print(f"{index}: {fruit}")
# Contrôle de bouclefor i in range(10): if i == 3: continue # Passer à l'itération suivante if i == 7: break # Sortir de la boucle print(i)# Sortie: 0 1 2 4 5 6
# Déballage dans les bouclespairs = [(1, 'a'), (2, 'b'), (3, 'c')]for number, letter in pairs: print(f"{number}: {letter}")
# Boucles whilecount = 0while count < 5: print(count) count += 1
# Clause else (exécutée si la boucle se termine sans break)for i in range(3): print(i)else: print("Loop completed")
# Boucles imbriquéesfor i in range(3): for j in range(2): print(f"({i}, {j})")Fonctions
Blocs de code réutilisables avec paramètres et valeurs de retour.
# Fonction de basedef greet(name): return f"Hello, {name}!"
# Paramètres par défautdef power(base, exponent = 2): return base ** exponent
# Arguments nommésdef describe_pet(name, animal_type="dog"): print(f"Pet: {name} ({animal_type})")
describe_pet("Max") # Utilise la valeur par défautdescribe_pet(animal_type="cat", name="Fluffy") # Ordre des mots-clés
# Arguments variablesdef sum_all(*args): # Tuple d'arguments return sum(args)
sum_all(1, 2, 3, 4) # 10
def print_info(**kwargs): # Dictionnaire d'arguments nommés for key, value in kwargs.items(): print(f"{key}: {value}")
print_info(name="Alice", age=30, city="Paris")
# Fonctions lambda (anonymes)square = lambda x: x ** 2add = lambda x, y: x + ynumbers = [1, 2, 3, 4, 5]squared = list(map(square, numbers)) # [1, 4, 9, 16, 25]evens = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
# Docstrings*# Elles sont utilisées pour décrire la fonction et ses paramètres.def calculate_area(radius): """ Calculer l'aire d'un cercle.
Args: radius (float): Le rayon du cercle
Returns: float: L'aire du cercle """ return 3.14159 * radius ** 2Gestion d’Exceptions
Gérer les erreurs élégamment avec les blocs try/except.
# Gestion d'exceptions de basetry: result = 10 / 0except ZeroDivisionError: print("Cannot divide by zero!")finally: print("Finally block always executed")
# Plusieurs types d'exceptionstry: value = int(input("Enter a number: ")) result = 10 / valueexcept ValueError: print("Invalid number format")except ZeroDivisionError: print("Cannot divide by zero")
# Capturer plusieurs exceptionstry: with open('file.txt', 'r') as file: data = file.read() number = int(data)except (FileNotFoundError, ValueError) as e: print(f"Error: {e}")
# Gestionnaire d'exceptions génériquetry: risky_operation()except Exception as e: print(f"Unexpected error: {e}")
# Bloc else (exécuté s'il n'y a pas d'exception)try: result = 10 / 2except ZeroDivisionError: print("Division error")else: print(f"Success: {result}")
# Lever des exceptionsdef validate_age(age): if age < 0: raise ValueError("Age cannot be negative") return ageGestionnaires de Contexte (instruction with)
Gestion automatique des ressources assurant un nettoyage approprié.
# Gestion de fichiers avec fermeture automatiquewith open('file.txt', 'r') as file: content = file.read() # Fichier automatiquement fermé en sortant du bloc
# Fichiers multipleswith open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile: data = infile.read() outfile.write(data.upper())
# Gestionnaire de contexte personnaliséfrom contextlib import contextmanager
@contextmanagerdef timer(): import time start = time.time() print("Timer started") try: yield finally: end = time.time() print(f"Elapsed: {end - start:.2f}s")
with timer(): # Opération qui prend du temps time.sleep(1)Programmation Orientée Objet
Classes et Objets
Définir des types de données personnalisés avec attributs et méthodes.
# Classe de baseclass Person: def __init__(self, name, age): # Constructeur self.name = name # Attribut d'instance self.age = age
def greet(self): # Méthode d'instance return f"Hello, I'm {self.name}"
def have_birthday(self): self.age += 1
# Créer des objetsperson1 = Person("Alice", 30)person2 = Person("Bob", 25)
print(person1.greet()) # "Hello, I'm Alice"person1.have_birthday()print(person1.age) # 31
# Attributs et méthodes de classeclass Circle: pi = 3.14159 # Attribut de classe
def __init__(self, radius): self.radius = radius
def area(self): return Circle.pi * self.radius ** 2
@classmethod def from_diameter(cls, diameter): # Constructeur alternatif return cls(diameter / 2)
@staticmethod def is_valid_radius(radius): # Méthode utilitaire return radius > 0
# Héritageclass Employee(Person): # Hérite de Person def __init__(self, name, age, job_title): super().__init__(name, age) # Appeler le constructeur parent self.job_title = job_title
def greet(self): # Redéfinition de méthode return f"Hello, I'm {self.name}, a {self.job_title}"
employee = Employee("Charlie", 35, "Developer")print(employee.greet()) # "Hello, I'm Charlie, a Developer"Opérations sur les Fichiers
Lecture et Écriture de Fichiers
Gérer les opérations d’entrée/sortie de fichiers en toute sécurité.
# Lecture de fichierswith open('data.txt', 'r') as file: content = file.read() # Lire tout le fichier
with open('data.txt', 'r') as file: lines = file.readlines() # Liste de lignes
with open('data.txt', 'r') as file: for line in file: # Itérer ligne par ligne print(line.strip())
# Écriture de fichierswith open('output.txt', 'w') as file: file.write("Hello, World!")
data = ["line1", "line2", "line3"]with open('output.txt', 'w') as file: file.writelines(f"{line}\n" for line in data)
# Modes de fichiers# 'r' - lecture (par défaut)# 'w' - écriture (écrase)# 'a' - ajout# 'x' - création exclusive# 'b' - mode binaire# 't' - mode texte (par défaut)
# Travailler avec les cheminsimport osfrom pathlib import Path
# Utiliser le module oscurrent_dir = os.getcwd()file_path = os.path.join(current_dir, 'data', 'file.txt')if os.path.exists(file_path): os.remove(file_path)
# Utiliser pathlib (approche moderne)path = Path('data') / 'file.txt'if path.exists(): content = path.read_text() path.unlink() # Supprimer le fichierEnvironnements Virtuels
Isoler les dépendances de projet pour éviter les conflits.
# Créer un environnement virtuelpython -m venv myenv
# Activer l'environnement# Linux/macOS:source myenv/bin/activate# Windows:myenv\Scripts\activate
# Installer des paquetspip install requests numpy
# Sauvegarder les dépendancespip freeze > requirements.txt
# Installer depuis requirementspip install -r requirements.txt
# Désactiver l'environnementdeactivateBibliothèque Standard
Modules essentiels inclus avec Python pour les tâches courantes.
sys - Interface Système
import sys
# Informations systèmesys.platform # 'linux', 'win32', 'darwin'sys.version # Informations de version Pythonsys.version_info # Tuple nommé avec parties de version
# Contrôle du programmesys.exit(0) # Sortir avec code de statutsys.argv # Liste des arguments de ligne de commande
# Flux d'entrée/sortieprint("Error!", file=sys.stderr)sys.stdout.write("Direct output\n")
# Manipulation des cheminssys.path.append('/custom/module/path')os - Interface Système d’Exploitation
import os
# Opérations de répertoireos.getcwd() # Répertoire de travail actuelos.chdir('/path/to/directory') # Changer de répertoireos.listdir('.') # Lister le contenu du répertoireos.makedirs('path/to/dir', exist_ok=True) # Créer des répertoires
# Opérations de fichiersos.rename('old.txt', 'new.txt')os.remove('file.txt') # Supprimer le fichieros.path.exists('file.txt') # Vérifier si le chemin existeos.path.isfile('file.txt') # Vérifier si c'est un fichieros.path.isdir('directory') # Vérifier si c'est un répertoire
# Variables d'environnementhome = os.environ.get('HOME', '/tmp')os.environ['CUSTOM_VAR'] = 'value'subprocess - Gestion des Processus
import subprocess
# Exécuter des commandesresult = subprocess.run(['ls', '-l'], capture_output=True, text=True)if result.returncode == 0: print(result.stdout)else: print("Error:", result.stderr)
# Exécuter avec le shellsubprocess.run('echo "Hello" > output.txt', shell=True)
# Différentes méthodes d'exécutionsubprocess.call(['python', 'script.py']) # Attendre la finsubprocess.Popen(['python', 'server.py']) # Non bloquantpathlib - Gestion Moderne des Chemins
from pathlib import Path
# Création et manipulation de cheminspath = Path('data') / 'files' / 'document.txt'path.mkdir(parents=True, exist_ok=True) # Créer des répertoires
# Opérations de fichierspath.write_text('Hello, World!')content = path.read_text()path.unlink() # Supprimer le fichier
# Propriétés de cheminpath.name # 'document.txt'path.stem # 'document'path.suffix # '.txt'path.parent # Path('data/files')datetime - Date et Heure
from datetime import datetime, date, timedelta
# Date et heure actuellesnow = datetime.now()today = date.today()
# Formatageformatted = now.strftime('%Y-%m-%d %H:%M:%S')parsed = datetime.strptime('2023-12-25', '%Y-%m-%d')
# Arithmétiquetomorrow = today + timedelta(days=1)week_ago = now - timedelta(weeks=1)json - Traitement JSON
import json
# Python vers JSONdata = {'name': 'Alice', 'age': 30}json_string = json.dumps(data)with open('data.json', 'w') as f: json.dump(data, f, indent=2)
# JSON vers Pythonparsed_data = json.loads(json_string)with open('data.json', 'r') as f: loaded_data = json.load(f)random - Nombres Aléatoires
import random
random.randint(1, 10) # Entier aléatoire entre 1 et 10random.random() # Float aléatoire entre 0 et 1random.choice(['a', 'b', 'c']) # Choix aléatoire dans une séquencerandom.shuffle([1, 2, 3, 4]) # Mélanger la liste sur place
# Échantillonnage aléatoirerandom.sample([1, 2, 3, 4, 5], 3) # Échantillon de 3 éléments sans remplacementBibliothèques Externes
Packages tiers populaires étendant les capacités de Python.
requests - Bibliothèque HTTP
pip install requestsimport requests
# Requête GETresponse = requests.get('https://api.github.com/users/octocat')data = response.json()print(response.status_code) # 200
# Requête POSTpayload = {'key': 'value'}response = requests.post('https://httpbin.org/post', json=payload)
# Avec headers et paramètresheaders = {'Authorization': 'Bearer token'}params = {'page': 1, 'per_page': 10}response = requests.get('https://api.example.com/data', headers=headers, params=params)numpy - Calcul Numérique
pip install numpyimport numpy as np
# Création de tableauxarr = np.array([1, 2, 3, 4, 5])matrix = np.array([[1, 2], [3, 4]])zeros = np.zeros((3, 3))ones = np.ones((2, 4))range_arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
# Opérations sur les tableauxarr * 2 # Multiplication élément par élémentarr + 10 # Addition élément par élémentnp.sum(arr) # Somme de tous les élémentsnp.mean(arr) # Moyennenp.max(arr) # Valeur maximalepandas - Analyse de Données
pip install pandasimport pandas as pd
# Création de DataFramedata = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'city': ['New York', 'London', 'Tokyo']}df = pd.DataFrame(data)
# Opérations sur les donnéesdf.head() # 5 premières lignesdf.describe() # Résumé statistiquedf[df['age'] > 30] # Filtrer les lignesdf.groupby('city').mean() # Grouper par ville
# Opérations de fichiersdf.to_csv('data.csv', index=False)df_loaded = pd.read_csv('data.csv')matplotlib - Graphiques
pip install matplotlibimport matplotlib.pyplot as plt
# Graphique simplex = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10]plt.plot(x, y)plt.xlabel('X values')plt.ylabel('Y values')plt.title('Simple Line Plot')plt.show()
# Graphiques multiplesplt.subplot(2, 1, 1)plt.plot(x, y)plt.subplot(2, 1, 2)plt.bar(x, y)plt.show()psutil - Informations Système
pip install psutilimport psutil
# Surveillance systèmepsutil.cpu_percent(interval=1) # Utilisation CPUpsutil.virtual_memory().percent # Utilisation mémoirepsutil.disk_usage('/').percent # Utilisation disque
# Informations des processusfor proc in psutil.process_iter(['pid', 'name', 'cpu_percent']): if proc.info['cpu_percent'] > 1.0: print(proc.info)