Python def fonction: Comment avez-vous indiquer la fin de la fonction?
Je suis en train d'apprendre python et confus quand un "def" d'une fonction se termine?
Je vois des exemples de code comme:
def myfunc(a=4,b=6):
sum = a + b
return sum
myfunc()
Je sais qu'il n'a pas de fin en raison du retour (parce que j'ai vu, si les états... si FOO que le retour de la BARRE, d'autre retour FOOBAR). Comment Python sais que ce n'est pas une fonction récursive qui s'appelle elle-même? Lorsque la fonction s'exécute t-il le maintenir par le biais du programme jusqu'à ce qu'il trouve un retour? Que j'avais de conduire à certains intéressant erreurs.
Grâce
- C'est un très bon commentaire. Toute introduction à Python mentionne importante d'espaces comme l'un des premiers, sinon le premier, des choses que c'est l'un des plus distinctifs Python, après tout.
- Jusqu'à présent, j'étais juste en utilisant cette feuille de triche: ibm.com/developerworks/library/l-cheatsheet3.html juste essayer et d'apprendre la syntaxe. Si vous avez un bon tutoriel suggestions, je suis ouvert.
- Google pour tutoriel. Ils sont probablement un peu mieux. La feuille de triche dit ceci "Blocs sont indiqués par indentation à la suite d'une déclaration se terminant par un signe deux-points (:) comme dans..." donc il n'est pas activement vous induire en erreur.
- le mieux serait de plongée en python
Vous devez vous connecter pour publier un commentaire.
En Python espace est importante. La fonction se termine lorsque le retrait devient plus petit (moins).
Noter que les fonctions de ligne peut être écrit sans indentation, sur une seule ligne:
Et, ensuite, il ya l'utilisation des points-virgules, mais c'est pas recommandé:
Les trois formes ci-dessus montrent comment la fin d'une fonction est définie syntaxiquement. Comme pour le sémantique, en Python il y a trois façons de sortir d'une fonction:
À l'aide de la
return
déclaration. Cela fonctionne de la même comme dans tout autre langage de programmation impératif que vous connaissez peut-être.À l'aide de la
yield
déclaration. Cela signifie que la fonction est un générateur. Expliquant sa sémantique est au-delà de la portée de cette réponse. Jetez un oeil à quelqu'un Peut-il m'expliquer le python yield?Simplement l'exécution de la dernière instruction. Si il n'y a plus de déclarations et de la dernière déclaration n'est pas une
return
l'instruction, puis la fonction existe que si la dernière instruction ont étéreturn None
. C'est-à-dire, sans explicitementreturn
déclaration d'une fonction renvoieNone
. Cette fonction renvoieNone
:Et ne donc:
Python white-space sensible en ce qui concerne l'indentation. Une fois que le niveau d'indentation retombe sur le niveau auquel la fonction est définie, la fonction est terminée.
Pour être précis, un bloc se termine lorsqu'il rencontre une ligne non vide en retrait, au plus, le même niveau avec le début. Cette non vide de ligne ne fait pas partie de ce bloc
Par exemple, l'impression suivante se termine à deux pâtés de maisons dans le même temps:
Le niveau d'indentation est inférieur ou égal à la fois à la def et si, par conséquent, il met fin à la fois.
Lignes avec aucune déclaration, peu importe la mise en retrait, n'a pas d'importance
Mais la déclaration qui marque la fin du bloc doit être mis en retrait au même niveau que tout existant à l'indentation. Le suivant, alors, est une erreur:
Généralement, si vous avez utilisé pour des accolades de la langue, juste indenter le code comme eux et vous serez amende.
BTW, les "standards" de l'indentation est avec des espaces, mais bien sûr onglet seulement est possible, mais merci de ne pas mélanger les deux.
Intéressant, si vous êtes juste en tapant au python interactif interprète, vous devez suivre une fonction avec une ligne vide. Cela ne fonctionne pas:
bien qu'il est parfaitement légal de la syntaxe de python dans un fichier. Il y a d'autres différences syntaxiques lors de la saisie de l'interprète trop, alors méfiez-vous.
...
. En fait, PEP8 vaguement les contours quand vous devriez et ne devriez pas avoir des lignes vides après les définitions de fonctions.les espaces blancs de la matière. lorsqu'un bloc est terminé, c'est lors de la définition de la fonction est terminée.
lorsque la fonction s'exécute, il l'empêche d'aller jusqu'à la fin, ou jusqu'à ce que
return
ouyield
instruction est rencontrée. Si la fonction se termine sans rencontrerreturn
ouyield
étatsNone
est retourné implicitement.il y a beaucoup plus d'informations dans le tutoriel.
Il utilise l'indentation
La indentation questions. Comme d'autres ici l'ont souligné, lorsque le niveau d'indentation est au même point que la def déclaration de la fonction votre fonction est terminée. Gardez à l'esprit que vous ne pouvez pas mélanger les tabulations et des espaces en Python. La plupart des éditeurs de fournir un soutien pour de cette.