La déclaration de passage ne fait rien. Il est utilisé lorsque vous avez besoin d'une déclaration syntaxique, mais que vous ne voulez pas que le programme fasse quoi que ce soit. Un exemple :
>>> Alors que c'est vrai :
.... passe # occupé à attendre que le clavier s'arrête (Ctrl+C)
...
Pass peut également être utilisé pour créer une classe minimum :
>>> Classe MyEmptyClass :
.... passe
...
peut également être utilisé comme espace réservé pour le fuselage d'une fonction ou d'un cycle dans la programmation descendante pour penser d'abord à une couche plus abstraite.
>>> def initlog(*arg) :
... pass # N'oubliez pas d'implémenter !
...
4.6. Définition des fonctions
Dans l'exemple suivant, on définit une fonction qui produit la séquence de Fibonacci jusqu'à une limite quelconque :
>>> def fib(n) : # sortie de la séquence de Fibonacci jusqu'à n
... "Imprimez la série Fibonacci jusqu'à n."
... a, b = 0, 1
......... alors que a < n :
... imprimer (a, fin=''''' ')
... a, b = b = b, a+b
.... print()
...
>>> Appelons maintenant la fonction que nous venons de définir :
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
- Le mot-clé def introduit la définition d'une fonction. Viennent ensuite le nom de la fonction et une liste de paramètres formels, qui peuvent également être vides. Les énoncés qui composent le corps fonctionnel commencent à la ligne suivante et doivent être en retrait.
La première déclaration du corps de fonction peut également être une chaîne littérale, une chaîne de documentation de fonction, également appelée docstring. (Pour plus d'informations sur la documentation, voir la section Chaînes de documentation.) Il existe des outils qui utilisent la documentation pour générer automatiquement de la documentation en ligne ou imprimée, ou pour permettre à l'utilisateur de rechercher le code de manière interactive. L'utilisation de docstrings est une bonne convention à suivre pendant la programmation.
- Lorsqu'une fonction est appelée, un espace de noms local est créé qui s'étend à tous les identificateurs redéfinis dans le corps de la fonction (par affectation ou comme éléments de la liste des paramètres). Ces identificateurs sont enregistrés avec les objets qui leur sont affectés dans une table de symboles locale.
Si un identificateur apparaît dans le corps de la fonction, le nom est d'abord recherché dans la table de symboles locale, puis dans les tables de symboles locales des fonctions environnantes, puis dans la table de symboles globale et enfin dans la table des symboles de noms intégrés. Il n'est donc pas possible d'assigner une valeur à une variable globale dans l'espace nom local d'une fonction. Au lieu de cela, il définirait une nouvelle variable locale avec le même nom qui couvrirait la variable globale avec le même nom, empêchant ainsi l'accès en lecture à cette variable globale. Sinon, l'accès en lecture aux variables globales est toujours possible, l'accès en écriture n'utilisant que l'instruction globale.
- Les paramètres concrets (arguments) qui sont passés lors de l'appel de la fonction sont affectés aux paramètres formels de la liste des paramètres et appartiennent donc à la table de symboles locale de la fonction. Cela signifie que les arguments sont passés par valeur (même si la valeur est toujours une référence à un objet, pas la valeur de l'objet lui-même)[1]. Si une fonction appelle une autre fonction, une nouvelle table de symboles locaux est créée pour cet appel.
Une définition de fonction insère le nom de la fonction dans la table de symboles locale. La valeur du nom de la fonction a un type qui est reconnu par l'agent utilisateur comme une fonction définie par l'utilisateur.
Fibre >>> Fibre
Fonction <fibre à 10042ed0>>>
>>>> f = fibre
>>> f(100)
0 1 1 2 3 5 8 13 21 34 55 89
- Si vous avez de l'expérience avec d'autres langages de programmation, vous pourriez objecter que fib n'est pas du tout une fonction, mais une procédure, car il ne renvoie pas de valeur. En fait, même les fonctions sans déclaration de retour retournent une valeur, bien qu'assez ennuyeuse, c'est-à-dire le nom intégré None ("rien"). La sortie de la valeur None est normalement supprimée par l'agent utilisateur si c'est la seule valeur qui est émise. Si vous voulez le voir, vous pouvez le rendre visible avec print() :
fib(0) >>>>>>> fib(0)
>>> Impression (Fibre(0))
neuvième
Au lieu d'émettre une séquence de nombres dans une fonction, vous pouvez également retourner une liste de ces nombres comme objet.
>>>>> def fib2(n) : # renvoie la séquence de Fibonacci à n
... "Retourne une liste contenant la série de Fibonacci jusqu'à n."
... résultat = liste()
... a, b = 0, 1
......... alors que a < n :
... résultat.append(a) # voir ci-dessous
... a, b = b = b, a + b
... résultat obtenu
...
>>> f100 = fib2(100) # le rappeler
>>>> f100 # a produit le résultat
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]