Parcourir la source

Décorateurs: work in progress

master
Dimitri Merejkowsky il y a 4 ans
Parent
révision
508392a558
12 fichiers modifiés avec 158 ajouts et 5 suppressions
  1. +0
    -0
      cours/source/06-fonctions-01/01-functions.rst
  2. +0
    -0
      cours/source/06-fonctions-01/02-portée-des-variables.rst
  3. +0
    -0
      cours/source/06-fonctions-01/03-plusieurs-arguments.rst
  4. +0
    -0
      cours/source/06-fonctions-01/04-par-défaut.rst
  5. +0
    -0
      cours/source/06-fonctions-01/05-fonctions-natives.rst
  6. +0
    -0
      cours/source/06-fonctions-01/06-return.rst
  7. +2
    -2
      cours/source/06-fonctions-01/index.rst
  8. +2
    -2
      cours/source/12-modules-01/index.rst
  9. +117
    -0
      cours/source/19-functions-02/01-introduction.rst
  10. +23
    -0
      cours/source/19-functions-02/02-décorateurs.rst
  11. +12
    -0
      cours/source/19-functions-02/index.rst
  12. +2
    -1
      cours/source/index.rst

cours/source/06-fonctions/01-functions.rst → cours/source/06-fonctions-01/01-functions.rst Voir le fichier


cours/source/06-fonctions/02-portée-des-variables.rst → cours/source/06-fonctions-01/02-portée-des-variables.rst Voir le fichier


cours/source/06-fonctions/03-plusieurs-arguments.rst → cours/source/06-fonctions-01/03-plusieurs-arguments.rst Voir le fichier


cours/source/06-fonctions/04-par-défaut.rst → cours/source/06-fonctions-01/04-par-défaut.rst Voir le fichier


cours/source/06-fonctions/05-fonctions-natives.rst → cours/source/06-fonctions-01/05-fonctions-natives.rst Voir le fichier


cours/source/06-fonctions/06-return.rst → cours/source/06-fonctions-01/06-return.rst Voir le fichier


cours/source/06-fonctions/index.rst → cours/source/06-fonctions-01/index.rst Voir le fichier

@@ -1,5 +1,5 @@
Chapitre 6 - Fonctions
======================
Chapitre 6 - Introduction aux fonctions
=======================================

.. toctree::
:maxdepth: 1

+ 2
- 2
cours/source/12-modules-01/index.rst Voir le fichier

@@ -1,5 +1,5 @@
Chapitre 12 - Modules - 1ère partie
===================================
Chapitre 12 - Introduction aux modules
======================================

Un fichier = un module
------------------------


+ 117
- 0
cours/source/19-functions-02/01-introduction.rst Voir le fichier

@@ -0,0 +1,117 @@
Jouons avec les fonctions
=========================

Introduction
------------

Reprenons ce qu'on a vu jusqu'ici.

D'une part, on peut créer des variables en les assignant à une valeur::

# Création d'une variable `x` avec la valeur 4
x = 4


D'autre part, on peut définir et appeler des fonctions::

# Définition de la fonction:
def dire_bonjour(nom):
print("Bonjour " + nome

# Appel
dire_bonjour("Max")

# Affiche: "Bonjour Max"


Fonctions en tant que variables
-------------------------------

Il se trouve qu'en Python, on peut assigner des variables à ... des fonctions

.. code-block:: python

# Définition d'une fonction `dire_bonjour_en_français`
def dire_bonjour_en_français(nom):
print("Bonjour " + nom)

# Définition d'une fonction `dire_bonjour_en_anglais`
def dire_bonjour_en_anglais(nom):
print("Hello " + nom)

# Création d'une variable qui pointe sur la fonction française:
ma_fonction_qui_dit_bonjour = dire_bonjour_en_français

# Appel de la fonction:
ma_fonction_qui_dit_bonjour("Max")

# Affiche: Bonjour Max


De façon cruciale, notez que l'on n'a *pas* mis de parenthèses à droite
lorsqu'on a créé la variable `ma_fonction_qui_dit_bonjour`.

On peut donc dire que lorsqu'on définit une fonction avec `def()` et un corps
il y a en réalité deux étapes:

1. Python stocke le corps de la fonction quelque part
2. Il crée une variable pointant vers ce corps

En Python, il est assez fréquent d'utiliser de code tel que celui-ci, souvent avec un dictionnaire:

Fonctions en tant qu'argement d'autres fonctions
------------------------------------------------

On a vu en début de chapitre qu'on peut créé des variables qui pointent
vers des fonctions.

Du coup, rien n'empêche de les passer en *argument* d'autres fonctions.

Par exemple::

def appelle_deux_fois(f):
f()
f()


def crier():
print("Aline !")

appelle_deux_fois(crier)

# Affiche:
# Aline !
# Aline !


Fonctions imbriquées
--------------------

On peut aussi définir une fonction dans une autre fonction::

TODO


Fonctions retournant des fonctions
----------------------------------

Enfin, on peut retourner une fonction depuis une autre fonction::

def fabrique_fonction_qui_additionne(n):
def fonction_résultat(x):
return x + n
return fonction_résultat


additionne_2 = fabrique_fonction_qui_additionne(2)
y = additionne_2(5)
print(y)
# Affiche: 7


Un autre paradigme
-------------------

Le fait qu'on puisse traiter les fonctions comme n'importe quelle
autre valeur (c'est-à-dire les assigner à des variables, les passer
en argument et les retourner)

+ 23
- 0
cours/source/19-functions-02/02-décorateurs.rst Voir le fichier

@@ -0,0 +1,23 @@
Fonctions en tant qu'argement d'autres fonctions
================================================

On a vu en début de chapitre qu'on peut créé des variables qui pointent
vers des fonctions.

Du coup, rien n'empêche de les passer en *argument* d'autres fonctions.

Par exemple::

def appelle_deux_fois(f):
f()
f()


def crier():
print("Aline !")

appelle_deux_fois(crier)

# Affiche:
# Aline !
# Aline !

+ 12
- 0
cours/source/19-functions-02/index.rst Voir le fichier

@@ -0,0 +1,12 @@
Chapitre 19 - Décorateurs
=========================

.. toctree::
:maxdepth: 1

01-introduction






+ 2
- 1
cours/source/index.rst Voir le fichier

@@ -22,7 +22,7 @@ remarques.
03-variables-et-types/index
04-booléens/index
05-flot-de-controle/index
06-fonctions/index
06-fonctions-01/index
07-listes/index
08-none-et-pass/index
09-dictionnaires/index
@@ -35,3 +35,4 @@ remarques.
16-interpréteur-interactif/index
17-sockets/index
18-classes-03/index
19-functions-02/index