J'ai commencé à apprendre Python récemment et je ne comprends pas pourquoi Python se comporte comme ceci:

>>> "OK"
'OK'
>>> """OK"""
'OK'
>>> "not Ok'
  File "<stdin>", line 1
    "not Ok'
           ^
SyntaxError: EOL while scanning string literal
>>> "not OK"""
'not OK'

Pourquoi ne donne-t-il pas d'erreur pour la dernière instruction car le nombre de guillemets ne correspond pas?

67
W. R. 3 sept. 2020 à 18:50

4 réponses

Meilleure réponse

Le """ final n'est pas reconnu comme une triple guillemet, mais comme un simple " (pour fermer la chaîne littérale actuelle) suivi d'une chaîne vide ""; les deux chaînes littérales juxtaposées sont concaténées. Le même comportement peut être plus facilement reconnu en mettant un espace entre la fermeture et l'ouverture ".

>>> "not OK" ""
'not OK'
111
chepner 3 sept. 2020 à 16:04

Python utilise comme une implémentation de pile pour détecter l'ouverture et la fermeture des guillemets. Si vous savez ce qu'est une pile, c'est une structure de données, dans laquelle le dernier élément sera supprimé en premier.

Supposons que votre chaîne est A = "''" Ce qu'il fait, c'est que pour chaque guillemet simple ou double guillemet rencontré la première fois, il l'ajoutera à la pile, et pour chaque seconde, il supprimera de la pile, sauf si bien sûr, """ qui sera analysé comme simple un

Dans notre exemple, A = "''", en l'itérant dessus, pour les 2 premiers éléments, ils seront ajoutés à la pile et pour les 2 suivants, ils seront supprimés.

Donc les guillemets seront mis en correspondance, si et seulement si, le nombre d'éléments dans la pile à la fin doit être zéro

-3
Aroo 10 sept. 2020 à 03:10

On pourrait penser qu'il n'y a aucune différence entre "ou", mais en réalité, Python utilise une méthode gourmande pour accepter l'entrée.

Une fois que Python voit une citation correspondante, cela met fin à l'instruction.

C'est pourquoi vous pouvez écrire quelque chose comme "'s" "". À l'intérieur de la chaîne, il y a un ' mais comme vous êtes dans une chaîne, python ne génère pas d'erreur. Ensuite, il y a un " suivi de " mais c'est une chaîne différente (vide).

Si vous faites quelque chose comme "s' alors Python recherche ce prochain " avant d'exécuter votre commande.

9
ZexalDaBeast 3 sept. 2020 à 15:58

"not OK"""

Python interprète cela comme "not OK"+""

Si vous donnez "not Ok""ay", vous obtiendrez le résultat comme 'not Okay'

31
Pranav Hosangadi 3 sept. 2020 à 15:57