@Abhijit: La principale différence est que j'ai demandé tous les mots réservés, y compris les éléments intégrés.
Neil G
edit: apparemment, beaucoup de gens utilisent "mot réservé" pour être synonyme de mot-clé. J'ai modifié la question en conséquence.
Neil G
@NeilG Je suis presque sûr que ce sont des synonymes en Python. Les Builtins ne sont certainement pas des mots réservés, car ils peuvent être réaffectés, par exemple print = None.
wjandrea
Réponses:
198
Pour vérifier qu'une chaîne est un mot-clé, vous pouvez utiliser keyword.iskeyword; pour obtenir la liste des mots-clés réservés que vous pouvez utiliser keyword.kwlist:
Notez que dans python2.6 <= xy <3.0 Noneest pas formellement un mot - clé (selon kwlistet iskeyword) , mais il est en fait un mot - clé (car None = 1échoue avec SyntaxError), bien qu'il soit répertorié comme ensemble intégré avec Trueet False.
Bakuriu
3
Juste par curiosité, quelle est la justification philosophique pour avoir une distinction entre les mots-clés et les builtins? Ne devraient-ils pas tous être réservés?
confusion
12
@notconfusing: les mots-clés font partie de la grammaire de la langue. Les Builtins agissent comme si vous l'aviez fait from builtins import *; ils peuvent être remplacés.
Neil G du
2
@notconfusing: en particulier, la réduction des mots-clés signifie que les mots courants ne sont pas inutilement indisponibles dans des scénarios sûrs . Bien sûr, l'assignation set = 1est une idée terrible, mais une classe avec une méthode ou un attribut nommé set(donc elle est toujours référencée avec instance.set, pas aussi simple set) n'est pas nécessairement terrible. Il existe des cas parfaitement légitimes pour nommer une méthode set; si setc'était un mot-clé, vous ne pourriez pas faire cela.
ShadowRanger
1
@wwii Les noms de méthodes spéciales ne sont pas définis globalement comme des builtins, ou font partie de la syntaxe comme des mots-clés. __len__en soi, cela ne veut rien dire. Vous devez dire str.__len__ou list.__len__. Il n'y a donc pas de soucis à propos de la collision entre vos noms de variables.
print = None
.Réponses:
Pour vérifier qu'une chaîne est un mot-clé, vous pouvez utiliser
keyword.iskeyword
; pour obtenir la liste des mots-clés réservés que vous pouvez utiliserkeyword.kwlist
:Si vous souhaitez également inclure des noms intégrés (Python 3), vérifiez le
builtins
module :Pour Python 2, vous devrez utiliser le
__builtin__
modulela source
None
est pas formellement un mot - clé (selonkwlist
etiskeyword
) , mais il est en fait un mot - clé (carNone = 1
échoue avecSyntaxError
), bien qu'il soit répertorié comme ensemble intégré avecTrue
etFalse
.from builtins import *
; ils peuvent être remplacés.set = 1
est une idée terrible, mais une classe avec une méthode ou un attribut nomméset
(donc elle est toujours référencée avecinstance.set
, pas aussi simpleset
) n'est pas nécessairement terrible. Il existe des cas parfaitement légitimes pour nommer une méthodeset
; siset
c'était un mot-clé, vous ne pourriez pas faire cela.__len__
en soi, cela ne veut rien dire. Vous devez direstr.__len__
oulist.__len__
. Il n'y a donc pas de soucis à propos de la collision entre vos noms de variables.