Leçon 4/6 7 min

Les fonctions

Créez des blocs réutilisables avec def, paramètres, return, *args, **kwargs et les fonctions built-in.

def — créer une fonction

Une fonction est un bloc de code réutilisable. On la définit avec def :

def saluer(nom):
    print(f"Bonjour {nom} !")

saluer("Alice")  # Bonjour Alice !
saluer("Bob")    # Bonjour Bob !

Le mot-clé return permet à la fonction de renvoyer une valeur :

def additionner(a, b):
    return a + b

resultat = additionner(3, 5)
print(resultat)  # 8

Rappel : l'indentation (4 espaces) définit le corps de la fonction. Tout ce qui est indenté après def fait partie de la fonction.

Paramètres par défaut

On peut donner une valeur par défaut à un paramètre :

def saluer(nom, langue="fr"):
    if langue == "fr":
        print(f"Bonjour {nom} !")
    else:
        print(f"Hello {nom}!")

saluer("Alice")           # Bonjour Alice !
saluer("Bob", "en")       # Hello Bob!
saluer("Charlie", langue="en")  # Hello Charlie!

Les paramètres avec défaut doivent être après les paramètres obligatoires.

*args et **kwargs — paramètres flexibles

*args accepte un nombre variable d'arguments :

def moyenne(*notes):
    return sum(notes) / len(notes)

print(moyenne(15, 12, 18))      # 15.0
print(moyenne(10, 20, 14, 16))  # 15.0

**kwargs accepte des arguments nommés (comme un dictionnaire) :

def creer_profil(**infos):
    for cle, valeur in infos.items():
        print(f"{cle}: {valeur}")

creer_profil(nom="Alice", age=25, ville="Paris")

Résultat :

nom: Alice
age: 25
ville: Paris

Fonctions lambda

Une lambda est une fonction anonyme en une ligne :

# Fonction classique
def doubler(x):
    return x * 2

# Même chose en lambda
doubler = lambda x: x * 2
print(doubler(5))  # 10

# Utile pour le tri
utilisateurs = [("Alice", 25), ("Bob", 30), ("Charlie", 20)]
utilisateurs.sort(key=lambda u: u[1])
print(utilisateurs)
# [('Charlie', 20), ('Alice', 25), ('Bob', 30)]

Fonctions built-in utiles

Python fournit des dizaines de fonctions prêtes à l'emploi :

# len, range, enumerate
fruits = ["pomme", "banane", "cerise"]
print(len(fruits))  # 3

for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")
# 0: pomme
# 1: banane
# 2: cerise

# zip — combiner des listes
noms = ["Alice", "Bob"]
ages = [25, 30]
for nom, age in zip(noms, ages):
    print(f"{nom} a {age} ans")
# Alice a 25 ans
# Bob a 30 ans

# map et filter
nombres = [1, 2, 3, 4, 5]
doubles = list(map(lambda x: x * 2, nombres))
pairs = list(filter(lambda x: x % 2 == 0, nombres))
print(doubles)  # [2, 4, 6, 8, 10]
print(pairs)    # [2, 4]

def — creating a function

A function is a reusable block of code. Define one with def:

def greet(name):
    print(f"Hello {name}!")

greet("Alice")  # Hello Alice!
greet("Bob")    # Hello Bob!

The return keyword lets the function send back a value:

def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 8

Reminder: indentation (4 spaces) defines the function body. Everything indented after def is part of the function.

Default parameters

You can give a parameter a default value:

def greet(name, language="en"):
    if language == "en":
        print(f"Hello {name}!")
    else:
        print(f"Bonjour {name} !")

greet("Alice")             # Hello Alice!
greet("Bob", "fr")         # Bonjour Bob !
greet("Charlie", language="fr")  # Bonjour Charlie !

Parameters with defaults must come after required parameters.

*args and **kwargs — flexible parameters

*args accepts a variable number of arguments:

def average(*grades):
    return sum(grades) / len(grades)

print(average(15, 12, 18))      # 15.0
print(average(10, 20, 14, 16))  # 15.0

**kwargs accepts named arguments (like a dictionary):

def create_profile(**info):
    for key, value in info.items():
        print(f"{key}: {value}")

create_profile(name="Alice", age=25, city="Paris")

Result:

name: Alice
age: 25
city: Paris

Lambda functions

A lambda is an anonymous one-line function:

# Regular function
def double(x):
    return x * 2

# Same thing as lambda
double = lambda x: x * 2
print(double(5))  # 10

# Useful for sorting
users = [("Alice", 25), ("Bob", 30), ("Charlie", 20)]
users.sort(key=lambda u: u[1])
print(users)
# [('Charlie', 20), ('Alice', 25), ('Bob', 30)]

Useful built-in functions

Python provides dozens of ready-to-use functions:

# len, range, enumerate
fruits = ["apple", "banana", "cherry"]
print(len(fruits))  # 3

for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")
# 0: apple
# 1: banana
# 2: cherry

# zip — combine lists
names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old")
# Alice is 25 years old
# Bob is 30 years old

# map and filter
numbers = [1, 2, 3, 4, 5]
doubles = list(map(lambda x: x * 2, numbers))
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(doubles)  # [2, 4, 6, 8, 10]
print(evens)    # [2, 4]
Avec l'IA

Copiez ce prompt dans Claude ou ChatGPT :

Écris une fonction Python qui prend une liste de nombres et renvoie un dictionnaire avec la moyenne, le minimum, le maximum et la médiane. Utilise *args pour accepter les nombres directement.
Quel mot-clé permet à une fonction de renvoyer une valeur ?
Que fait *args dans une définition de fonction ?
Que renvoie enumerate(["a", "b", "c"]) ?
Besoin d'un développeur pour votre projet ?

Réponse sous 24h — Sans engagement