@Abhijit: Der Hauptunterschied ist, dass ich nach allen reservierten Wörtern einschließlich eingebauter Wörter gefragt habe.
Neil G
Bearbeiten: Anscheinend verwenden viele Leute "reserviertes Wort" als Synonym für Schlüsselwort. Ich habe die Frage entsprechend bearbeitet.
Neil G
@NeilG Ich bin mir ziemlich sicher, dass sie Synonyme in Python sind. Builtins sind definitiv keine reservierten Wörter, da sie neu zugewiesen werden können, z print = None.
wjandrea
Antworten:
198
Um zu überprüfen, ob eine Zeichenfolge ein Schlüsselwort ist, können Sie Folgendes verwenden keyword.iskeyword: Um die Liste der reservierten Schlüsselwörter zu erhalten, können Sie Folgendes verwenden keyword.kwlist:
Beachten Sie, dass in python2.6 <= xy <3.0 Noneist nicht formal ein Schlüsselwort (nach kwlistund iskeyword) , aber es ist eigentlich ein Schlüsselwort (weil None = 1mit einem nicht SyntaxError), obwohl sie als Einbau in zusammen mit aufgeführt ist Trueund False.
Bakuriu
3
Was ist aus Neugier die philosophische Rechtfertigung für die Unterscheidung zwischen Schlüsselwörtern und Builtins? Sollten sie nicht alle reserviert sein?
verwirrend
11
@notconfusing: Schlüsselwörter sind Teil der Grammatik der Sprache. Builtins tun so, als hätten Sie es getan from builtins import *; Sie können überschrieben werden.
Neil G
2
@notconfusing: Insbesondere das Minimieren von Schlüsselwörtern bedeutet, dass gebräuchliche Wörter in sicheren Szenarien nicht unnötig nicht verfügbar sind . Sicher, das Zuweisen set = 1ist eine schreckliche Idee, aber eine Klasse mit einer Methode oder einem Attribut namens set(daher wird immer darauf verwiesen instance.set, nicht so einfach set) ist nicht unbedingt schrecklich. Es gibt durchaus legitime Fälle für die Benennung einer Methode set. Wenn setes ein Schlüsselwort wäre, könnten Sie das nicht tun.
ShadowRanger
1
@wwii Die speziellen Methodennamen sind nicht global wie eingebaute Elemente oder Teil der Syntax wie Schlüsselwörter definiert. __len__allein bedeutet nichts. Du musst sagen str.__len__oder list.__len__. Sie müssen sich also keine Sorgen machen, dass Ihre Variablennamen mit ihnen kollidieren.
print = None
.Antworten:
Um zu überprüfen, ob eine Zeichenfolge ein Schlüsselwort ist, können Sie Folgendes verwenden
keyword.iskeyword
: Um die Liste der reservierten Schlüsselwörter zu erhalten, können Sie Folgendes verwendenkeyword.kwlist
:Wenn Sie auch integrierte Namen einfügen möchten (Python 3), überprüfen Sie das
builtins
Modul :Für Python 2 müssen Sie das
__builtin__
Modul verwendenquelle
None
ist nicht formal ein Schlüsselwort (nachkwlist
undiskeyword
) , aber es ist eigentlich ein Schlüsselwort (weilNone = 1
mit einem nichtSyntaxError
), obwohl sie als Einbau in zusammen mit aufgeführt istTrue
undFalse
.from builtins import *
; Sie können überschrieben werden.set = 1
ist eine schreckliche Idee, aber eine Klasse mit einer Methode oder einem Attribut namensset
(daher wird immer darauf verwieseninstance.set
, nicht so einfachset
) ist nicht unbedingt schrecklich. Es gibt durchaus legitime Fälle für die Benennung einer Methodeset
. Wennset
es ein Schlüsselwort wäre, könnten Sie das nicht tun.__len__
allein bedeutet nichts. Du musst sagenstr.__len__
oderlist.__len__
. Sie müssen sich also keine Sorgen machen, dass Ihre Variablennamen mit ihnen kollidieren.