C'est vraiment juste une question théorique d'un débutant en python qui veut en savoir plus.
J'oublie toujours les deux points après les instructions initiales de bloc en python. Voilà ce que je veux dire:
for <variable> in <sequence>:
if <blah blah>:
Ma pensée est qu'une des raisons que j'oublie toujours, c'est qu'elles sont de facto implicites: deux points ou pas, la déclaration se termine par cette ligne.
Ma question - que je pose afin d'apprendre comment fonctionne la syntaxe python - est de savoir si les deux points sont vraiment inutiles? Si je devais changer la syntaxe python pour que les deux-points ne soient plus nécessaires, quelque chose se briserait-il? Cela rendrait-il certaines déclarations ambiguës ou impossibles?
if
,else
,while
et ainsi de suite. Si vous faisiez cela, le python serait-il toujours un langage qui peut être utilisé sans ambiguïté?if .. then .. end
sur une seule ligne. Donc ici en pythonthen
est substitué par deux choses a:
et une nouvelle ligne obligatoire. L'un d'eux semble redondant.Réponses:
Oui, les deux points sont nécessaires pour lever l'ambiguïté de certaines constructions. Considérez, par exemple
if x - y < z: pass
,. Sans les deux points, nous ne pouvons pas décider comment analyser cela sans connaître le contexte de ce que sont x, y et z.if x: -y < z...
est valide si x est booléen,if x - y < z:
est valide sinon.Comme c'est une très bonne idée pour une langue de programmation de ne pas vous obliger à exécuter une application jusqu'au point que vous compilez pour pouvoir l'analyser, les deux-points sont très nécessaires. Vous pourriez le laisser tomber, mais vous auriez besoin d'autres façons de lever l'ambiguïté.
la source
if condition: print("Condition passed")\n
autorisé? Le\n
symbolise la nouvelle ligne après l'instruction print.Le deux-points n'est pas vraiment nécessaire grammaticalement, si Python avait été conçu dans un monde différent, il est tout à fait concevable que le concepteur de langage ne décide pas d'exiger le deux-points. Et en effet, des langues comme Cobra le font.
La principale raison pour laquelle deux points sont requis en python est la lisibilité humaine. Pour citer la FAQ Python :
Comme également mentionné dans la FAQ, les deux points facilitent également le traitement du code python sans analyser complètement le langage. Tout processeur de texte doté d'un analyseur à part entière, y compris le compilateur python, peut se passer des deux points s'il n'était pas requis ou s'il est rendu facultatif lorsqu'il n'est pas ambigu.
la source
Ce n'est pas nécessaire pour l'ordinateur, mais pour les humains.
Guido van Rossum (créateur de Python) avait un blog d'histoire Python pendant un certain temps. Le deux-points a été introduit dans ABC , la source de nombreuses fonctionnalités de Python.
Dans ce billet de blog sur "Karin Dewar, l'indentation et le colon" , Guido écrit:
( B voici une série de langages prototypes B0, B1, ... qui ont conduit à ABC. Ce n'est pas le langage B qui est le prédécesseur de C).
Je me souviens aussi que Guido avait souligné dans les années 90 que c'était pour le bénéfice des éditeurs , qui pouvaient automatiquement insérer un tiret après une ligne qui se termine par deux points. Mais je n'ai pas encore trouvé de source pour cela.
la source
La syntaxe du langage de programmation Cobra est fortement inspirée de celle de Python, et elle supprime les deux points, il semble donc que ce ne soit pas strictement nécessaire. Cependant, il ne suffit pas de supprimer simplement les deux-points, d'autres modifications de la syntaxe sont nécessaires. Voir, par exemple, ce morceau de code d'un de mes projets de jouets :
Sans les deux points pour séparer le corps de la liste des paramètres, je devrais utiliser l'indentation:
Je crois que les versions antérieures de Cobra rendaient le deux-points facultatif, vous pouviez utiliser soit l'indentation, soit un deux-points, soit les deux. Semblable à la façon dont cela fonctionne dans Ruby, où il existe des mots clés pour séparer les différentes parties des expressions de contrôle, mais vous pouvez également utiliser des séparateurs d'expression (point-virgule ou nouvelle ligne):
Dans les versions actuelles de Cobra, vous pouvez utiliser une virgule:
peut être écrit comme
Vous avez besoin d' un moyen de séparer les différentes parties des expressions ou définitions de contrôle. En Python, c'est le colon. Si vous supprimez les deux points, vous devez le remplacer par autre chose, par exemple une indentation forcée . Seul le retrait du côlon ne fonctionnera pas.
La seule façon d'être absolument sûr est de formaliser la syntaxe avec et sans deux points et de prouver sa non-ambiguïté.
Notez, cependant, que l'un des aphorismes du Zen de Python est "Explicit is better than Implicit", donc la délimitation explicite des blocs avec deux-points semble correspondre à la philosophie générale de Python. La FAQ sur la conception et l'histoire mentionne également que cette décision est basée sur des preuves empiriques du prédécesseur de Python, ABC.
la source