Les Fonctions

 

Facile

  1. Le concept
  2. La convention
  3. La manipulation

Le concept

Les fonctions sont là pour organiser notre code de manière à ce que dernier soit plus facile à lire.

La convention

Même convention que les noms de variables.

La manipulation

Supposons que vous êtes un magicien. Par conséquent, vous avez des sorts:
#Variables.
energy = 100 
isMale = False
#SORT 1 : Attend 5 secondes avant de lancer une boule de feu.
if energy >= 60:
    energy -= 60
    #Décrémentation
    for i in range(5, -1, -1):
        print("Le sort va être prêt dans {} sec".format(i))
    print("BOULE DE FEU!")
else:
    print("ECHEC CRITIQUE")
    
print("Energie restante: {}".format(energy))
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40


#SORT 2 : Attend 6 secondes avant d'utiliser le 'Sexy jutsu'.

if energy >= 50: 
    if isMale is True:
        for i in range(5, -1, -1):
            print("Le sort va être prêt dans {} sec".format(i))
        print("SEXY JUTSU ! (Pas très efficace ...)")
    else:
        for i in range(5, -1, -1):
            print("Le sort va être prêt dans {} sec".format(i))
        print("SEXY JUTSU ! (Très efficace !)")
    energy -= 50
else:
    print("ECHEC CRITIQUE")

print("Energie restante: {}".format(energy))
>>>
ECHEC CRITIQUE
Energie restante: 40
Puisque vous êtes un magicien, vous ne voulez pas écrire vos sorts à chaque combat n'est-ce-pas? Vous voulez faire comme les autres magiciens et pouvoir crier le nom du sort directement!

Voici comment faire:
def bouleDeFeu(energy):
    """
        SORT 1 : Attend 5 secondes avant de lancer une boule de feu.
        :param "energy": quantité d'énergie.
    """
    if energy >= 60:
        energy -= 60
        #Décrémentation
        for i in range(5, -1, -1):
            print("Le sort va être prêt dans {} sec".format(i))
        print("BOULE DE FEU!")
    else:
        print("ECHEC CRITIQUE")

    print("Energie restante: {}".format(energy))
def sexyJutsu(energy, isMale):
    """
        SORT 2 : Attend 6 secondes avant d'utiliser le 'Sexy jutsu'.
        :param "energy": quantité d'énergie.
        :param "isMale" booléen, si l'ennemie est masculin ou pas.
    """
    if energy >= 50: 
        if isMale is True:
            for i in range(5, -1, -1):
                print("Le sort va être prêt dans {} sec".format(i))
            print("SEXY JUTSU ! (Pas très efficace ...)")
        else:
            for i in range(5, -1, -1):
                print("Le sort va être prêt dans {} sec".format(i))
            print("SEXY JUTSU ! (Très efficace !)")
        energy -= 50
    else:
        print("ECHEC CRITIQUE")

    print("Energie restante: {}".format(energy))
energy = 100 
isMale = False
bouleDeFeu(energy)
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40
Plusieurs points à mentioner:
  1. Une fonction en Python commence par le mot-clef def.
  2. Ce qu'il y a entre parenthèse après le nom de la fonction s'appelle argument.
  3. Le texte entouré de """ """ (triple guillemets) est appelé une docstring (documentation string). Elle permet d'avoir des informations sur l'utilité de la fonction et des ses paramètres.
Remarque:
- Une fonction n'est pas obligée d'avoir des arguments !
def f():
    print("Hello World!")
f()
>>> Hello World!

Testons l'exemple suivant:
energy = 100 
isMale = False
bouleDeFeu(energy)
print()
sexyJutsu(energy, isMale)
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40

Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
SEXY JUTSU ! (Très efficace !)
Energie restante: 50
Pouvez-vous voir le problème?

On avait 100 d'énergie. Après l'appel de bouleDeFeu(), il nous reste plus que 40 d'énergie.
Ainsi, lancer le sort sexyJutsu() ne devrait pas être possible ! Alors pourquoi cela marche ?
Cela est dut au fait que les fonctions ont leurs propres environnements.

Voici un schéma résumant la situation:

Fonctions scope

Nous, nous voulons la situation suivante:

Fonction environnement

Ainsi, pour que cela marche comme on le souhaite, nous devons faire en sorte que la variable “energy” sorte de son environnement.

C’est ici qu’intervient le mot-clef return.

def bouleDeFeu(energy):
    """
        SORT 1 : Attend 5 secondes avant de lancer une boule de feu.
        :param "energy": quantité d'énergie.
    """
    if energy >= 60:
        energy -= 60
        #Décrémentation
        for i in range(5, -1, -1):
            print("Le sort va être prêt dans {} sec".format(i))
        print("BOULE DE FEU!")
    else:
        print("ECHEC CRITIQUE")

    print("Energie restante: {}".format(energy))
    
    #On fait sortir 'energy' de son environnement.
    return energy
energy = 100
isMale = False
energy = bouleDeFeu(energy)
print()
sexyJutsu(energy, isMale)
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40

ECHEC CRITIQUE
Energie restante: 40
Ce que vous venez de voir est la notion de scope.
Remarque:
- Comme dit auparavant, print() ne retourne pas de valeurs mais affiche dans la console.
- Par conséquent, si on ne fait que return, le résultat ne s'affichera pas dans la console.

Pour résumer:

- Les fonctions sont là pour organiser notre code de manière à ce que dernier soit plus facile à lire.
- En ce qui concerne les noms de fonctions, même convention que les variables.
- Une fonction en Python commence par le mot-clef def.
- Ce qu'il y a entre parenthèse après le nom de la fonction s'appelle argument.
- Le texte entouré de """ """ (trple guillemets) est appelé une docstring (documentation string). Elle permet d'avoir des informations sur l'utilité de la fonction et des ses paramètres.
- Chaque fonction a son propre scope (environnement).
- Pour pouvoir intéragir avec l'envrionnement globale, cette dernière doit return sa valeur.