edubun
Français

Écrire tes propres fonctions

Une fonction qui se termine sans return renvoie None, c'est pourquoi print(print("hi")) affiche hi puis None.

Deux fonctions qui se ressemblent à l'écran

La plupart des débutants croient qu'afficher une valeur et la rendre sont la même chose. Voici deux fonctions qui semblent toutes deux « donner » l'aire d'un rectangle. def commence une définition de fonction : un nom, les entrées entre parenthèses, des deux-points et un corps indenté. Exécute le programme et les deux lignes de sortie se ressemblent.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

show_area(4, 3)
print(area(4, 3))
Sortie
12
12

Essaie maintenant d'utiliser les résultats dans un calcul. La différence apparaît aussitôt.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

a = show_area(4, 3)
b = area(4, 3)
print(a, b)
print(b * 2)
Sortie
12
None 12
24

show_area affiche 12 à l'écran puis se termine. Elle ne rend rien, et une fonction qui ne rend rien renvoie la valeur spéciale None. Donc a vaut None. area n'affiche rien ; elle renvoie 12 à la ligne qui l'a appelée, et ce 12 peut être stocké, affiché ou doublé. Afficher est fait pour les humains qui regardent l'écran. Renvoyer est fait pour le reste du programme. Si tu veux utiliser un résultat plus tard, renvoie-le.

Une fonction prend des arguments en entrée, exécute son corps avec eux et rend une valeur avec return. area(4, 3) devient 12 partout où il est écrit.

Les paramètres sont les noms, les arguments sont les valeurs

Dans def area(w, h):, w et h sont des paramètres : des noms qui n'existent qu'à l'intérieur de la fonction. Dans area(4, 3), 4 et 3 sont des arguments : les valeurs qui remplissent ces noms pour cet appel. Ils sont associés par position, le premier argument va donc au premier paramètre. Appelle la fonction avec un mauvais nombre d'arguments et Python s'arrête avec un TypeError qui nomme le paramètre manquant.

Un paramètre peut avoir une valeur par défaut, écrite avec = dans la définition. Les appelants peuvent omettre cet argument, et la valeur par défaut est utilisée. Le tutoriel Python présente les valeurs par défaut dans sa section sur la définition de fonctions, et on les trouve partout dans les fonctions intégrées. print en a une lui-même : son paramètre end vaut par défaut un retour à la ligne.

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Mina"))
print(greet("Jun", "Hi"))
print("no new line", end=" ")
print("here")
Sortie
Hello, Mina!
Hi, Jun!
no new line here

return termine la fonction aussitôt

Une fonction s'arrête au premier return qu'elle atteint, même s'il y a d'autres lignes en dessous. Les retours anticipés sont donc une façon propre de traiter les cas particuliers. La fonction ci-dessous reprend la règle des billets de l'unité sur if, maintenant empaquetée pour que n'importe quelle partie d'un programme puisse demander un prix.

def ticket_price(age):
    if age < 7:
        return 0
    if age <= 18:
        return 3000
    return 5000

family = [40, 15, 5]
total = 0
for age in family:
    total += ticket_price(age)
print(total)
Sortie
8000

Les variables créées à l'intérieur d'une fonction sont locales : elles existent pendant l'exécution de la fonction et disparaissent quand elle se termine. Une variable nommée total dans une fonction n'a rien à voir avec un total à l'extérieur. C'est ce qui te permet de réutiliser une fonction sans te soucier des noms que le reste du programme utilise.

defCommence une définition de fonction
paramètreUn nom dans la définition : w dans def area(w, h)
argumentUne valeur passée dans un appel : 4 dans area(4, 3)
returnRend une valeur et termine la fonction
NoneCe qu'une fonction renvoie quand elle n'a pas de return
variable localeUne variable qui n'existe qu'à l'intérieur d'une fonction
  1. Qu'affiche ce code ?
    def double(x):
        return x * 2
    
    print(double(7))
  2. Qu'affiche ce code ?
    def hello():
        print("hi")
    
    result = hello()
    print(result)
    • hi
      hi
    • hi
      None
    • None
    • hi
  3. Qu'affiche ce code ?
    def add(a, b):
        return a + b
    
    print(add(2, 3) * add(1, 1))
  4. Qu'affiche ce code ?
    def f(x):
        return x + 1
        print("never")
    
    print(f(1))
  5. Qu'affiche ce code ?
    def greet(name, greeting="Hello"):
        return greeting + " " + name
    
    print(greet("Bo"))
  6. Qu'affiche ce code ?
    def sign(n):
        if n > 0:
            return "plus"
        if n < 0:
            return "minus"
        return "zero"
    
    print(sign(-4), sign(0))
  7. Qu'affiche ce code ?
    print("a", end="-")
    print("b")
  8. Qu'affiche ce code ?
    def total_of(nums):
        t = 0
        for n in nums:
            t += n
        return t
    
    print(total_of([4, 5, 6]))
  9. Dans def area(w, h):, comment s'appellent w et h ?
    • Des arguments
    • Des paramètres
    • Des valeurs de retour
    • Des mots-clés
  10. Mets les lignes dans l'ordre pour que le programme affiche 25.
    Sortie
    25
Erreurs fréquentes
  • « Une fonction qui affiche la réponse l'a renvoyée. » Afficher ne fait que montrer la valeur. La fonction renvoie toujours None, donc x = show_area(4, 3) laisse x à None et x * 2 s'arrête avec TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'.
  • « Je peux appeler une fonction au-dessus de la ligne où je la définis. » Python s'exécute depuis le haut, donc à ce moment le nom n'existe pas encore : NameError: name 'area' is not defined. Mets le def au-dessus du premier appel.
  • « Omettre un argument le met simplement à zéro. » Sans valeur par défaut, Python s'arrête : area(4) donne TypeError: area() missing 1 required positional argument: 'h'.
Note du professeurLa confusion entre print et return est le malentendu le plus courant à ce stade, et elle se cache parce que l'écran paraît identique. Fais stocker le résultat dans une variable et utiliser ce résultat dans un second calcul : le None apparaît aussitôt. Le langage aide : dis qu'une fonction « rend » ou « renvoie » une valeur, et réserve « affiche » à print. Le programme coréen d'informatique au collège associe l'usage des fonctions à la recherche et à la correction d'erreurs : les erreurs d'argument manquant et d'appel avant def sont donc un bon matériau pour un court exercice de débogage.
L'essentiel
  • def nom(paramètres) : commence une fonction ; le corps est indenté.
  • return rend une valeur et termine la fonction.
  • print montre une valeur ; il ne la renvoie pas. Pas de return signifie None.
  • Les arguments remplissent les paramètres par position ; les valeurs par défaut remplissent les manquants.
  • Les variables créées dans une fonction lui sont locales.
Sources de ce cours (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Consulté le: 2026-10-19