Comprendre les fonctions Python et leurs paramètres


def salutation():
    print("Bonjour à tous")

resultat = salutation()  # Appel de la fonction
print(resultat)  # Affiche None car aucune valeur n'est retournée

Une fonction Python peut retourner une valeur ou un objet. Lorsqu'elle retourne un conteneur comme une liste ou un tuple, cela peut sembler être plusieurs retours distincts.


def obtenir_liste():
    return ['a', 100, -5.5]

def obtenir_tuple():
    return 'b', [42, 'Python'], "Monty"
# La fonction obtenir_tuple retourne un tuple, ce qui simule plusieurs valeurs

Il est recommandé de documenter les fonctions avec des chaînes de documentation (docstirngs). La convention consiste en une chaîne multiligne, la première ligne en majuscule se terminant par un point, suivie d'une ligne vide et d'une description détaillée.


def calculer_total():
    """
    calculer_total() - Calcule la somme de valeurs.
    Cette fonction additionne les éléments fournis.
    """
    # Corps de la fonction

Les paramètres d'une fonction se divisent en paramètres formels (définition) et paramètres actuels (appel). Python offre quatre types de paramètres :

Paramètres positionnels ou par mot-clé

C'est le type par défaut. Les arguments peuvent être passés par position ou par mot-clé.


def afficher_info(prenom, nom="Dupont"):
    print(f"{prenom} {afficher_info}")

# Appels valides
afficher_info("Jean")  # Par position
afficher_info(nom="Martin", prenom="Pierre")  # Par mot-clé
afficher_info("Paul", nom="Durand")  # Mixte

Paramètres uniquement positionnels

Certains fonctions intégrées n'acceptent que des arguments positionnels.


# abs() n'accepte pas de mots-clés
print(abs(-5))  # Fonctionne
# abs(valeur=5)  # Erreur TypeError

Paramètres en nombre arbitraire positionnels

Avec un astérisque (*), les arguments supplémentaires sont collectés dans un tuple.


def collecter_args(premier, second, *supplements):
    print(premier, second, supplements)

collecter_args("x", "y", 1, 2, 3)  # Affiche x y (1, 2, 3)
# Pour passer un tuple existant, utiliser *
args_tuple = (1, 2, 3)
collecter_args("x", "y", *args_tuple)  # Décompacte le tuple

Paramètres en nombre arbitraire par mot-clé

Avec deux astérisques (**), les arguments supplémentaires sont collectés dans un dictionnaire.


def collecter_kwargs(premier, second, **supplements):
    print(premier, second, supplements)

collecter_kwargs("a", "b", x=1, y=2)  # Affiche a b {'x': 1, 'y': 2}
# Pour passer un dictionnaire existant, utiliser **
dict_args = {'x': 1, 'y': 2}
collecter_kwargs("a", "b", **dict_args)  # Décompacte le dictionnaire

Lors de la définision, l'ordre des paramètres doit respecter : paramètres positionnels ou par mot-clé (sans valeur par défaut d'abord), puis *args, enfin **kwargs. Chaque type ne peut apparaître qu'une fois.


def fonction_complete(p1, p2="défaut", *args_sup, **kwargs_sup):
    print(f"p1={p1}, p2={p2}, args={args_sup}, kwargs={kwargs_sup}")

fonction_complete(1)
fonction_complete(1, 2, 3, 4, clé="valeur")

Passage de paramètres : valeur ou référence ?

En Python, les arguments sont passés par référence d'objet. Les objets mutables comme les listes peuvent être modifiés dans la fonction, mais la réaffectation ne change pas la variable globale sans global.


donnees = [10, 20, 30]
def modifier_liste(lst):
    lst.append(40)  # Modifie l'objet mutable

modifier_liste(donnees)
print(donnees)  # Affiche [10, 20, 30, 40]

def reassigner(lst):
    lst = [100, 200]  # Crée une nouvelle liste locale

reassigner(donnees)
print(donnees)  # Toujours [10, 20, 30, 40]

Variables locales et globales

Les variables définies dans une fonction sont locales. Pour modifier une variable globale, utilisez l'nistruction global, mais cela est déconseillé pour maintenir la modularité.


compteur = 0
def incrementer():
    global compteur
    compteur += 1

incrementer()
print(compteur)  # Affiche 1

Expressions lambda

Les lambdas sont des fonctions anonymes courtes, définies avec le mot-clé lambda, utiles pour des opérations simples.


triple = lambda n: n * 3
print(triple(7))  # Affiche 21

Étiquettes: Python fonctions paramètres portée-variable Lambda

Publié le 16 juillet à 16h55