Python: Fonctions

From Wiki Cours
Revision as of 11:25, 21 August 2015 by Wiki-cours (talk | contribs)
Jump to navigation Jump to search

<--Sommaire

Définir une fonction

Deux options suivant la complexité

1. définition usuelle à l'aide du mot-clé def et ouverture d'un bloc. return permet que la fonction renvoie un résultat mais ce n'est pas obligatoire, la fonction peut simplement manipuler les données en entrée

def f(x):
    return x**2

2. on peut également définir une fonction lambda ou 'fonction anonyme' selon

f = lambda x: x**2

dans l'exemple ci-dessus, le caractère anonyme n'est pas très clair car on lui a affecté la variable f pour l'utiliser avec f(x) comme précédemment le caractère anonyme apparaît lorsqu'on passe ce type de fonction en argument.

Récursivité

Une fonction peut s'appeler elle-même

def f(x):
    if x < 10: return x*f(x+1)
    else: return 10
print f(1), f(10), f(9), f(2.34)

Fonction à l'intérieur d'une fonction

Il est possible de définir une fonction à l'intérieur d'une autre fonction. Dans ce cas, la fonction n'est visible qu'à l'intérieur de la fonction principale et ne peut être utilisée dans le champ global:

def f(x):
    from math import exp
    def g(y): return y**2+1
    return exp(g(x)) / g(x)
print f(1), g(2)

Dans l'exemple, l'affichage de g(2) renvoie une erreur. Cela peut être très pratique pour structure le corps d'une fonction complexe sans avoir à polluer le niveau global avec beaucoup de fonctions.

Appliquer une fonction à une liste

une suppose une fonction f() définie, par exemple

f = lambda x: x**2
A = range(10)# initialisation d'une liste

une première version lourde mais qui ressemble au C

B = [ 0.0 ]*len(A)
for i in range(len(A)):
    B[i] = f(A[i])

une version similaire mais écrite en ligne

B = [ f(A[i]) for i in range(len(A)) ]

le même résultat en itérant directement sur les éléments de A

B = [ f(a) for a in A ]

en utilisant la fonction map du standard Python (générique)

B = map(f,A)

enfin le tout en une ligne, possible uniquement avec une définition faite par le mot-clé lambda

B = map(lambda x: x**2,A)

Passage d'arguments d'une fonction

Documentation d'une fonction

On peut écrire aisément une documentation pour une fonction en écrivant sous la définition un texte insérer dans des triples guillemets. On peut alors faire afficher la documentation à l'aide de la fonction help

def Sort(L, cmp):
    """
    Fonction Sort(L): 
    prend une liste L en argument et la tri selon la méthode cmp.
    """
help(Sort)