@Abhijit: La principal diferencia es que pedí todas las palabras reservadas, incluidas las incorporadas.
Neil G
editar: aparentemente muchas personas usan "palabra reservada" para ser sinónimo de palabra clave. He editado la pregunta en consecuencia.
Neil G
@NeilG Estoy bastante seguro de que son sinónimos en Python. Las palabras incorporadas definitivamente no son palabras reservadas, ya que pueden reasignarse, por ejemplo print = None.
wjandrea
Respuestas:
198
Para verificar que una cadena es una palabra clave, puede usarla keyword.iskeyword; para obtener la lista de palabras clave reservadas que puede usar keyword.kwlist:
Tenga en cuenta que en python2.6 <= xy <3.0 noNone es formalmente una palabra clave (de acuerdo con y ), pero en realidad es una palabra clave (porque falla con a ), aunque se incluye como integrada junto con y . kwlistiskeywordNone = 1SyntaxErrorTrueFalse
Bakuriu
3
Solo por curiosidad, ¿cuál es la justificación filosófica para tener una distinción entre palabras clave e incorporadas? ¿No deberían estar todos reservados?
confuso
11
@notconfusing: las palabras clave son parte de la gramática del lenguaje. Los builtins actúan como si lo hubieras hecho from builtins import *; pueden ser anulados.
Neil G
2
@notconfusing: en particular, minimizar las palabras clave significa que las palabras comunes no están innecesariamente disponibles en escenarios seguros . Claro, la asignación set = 1es una idea terrible, pero una clase con un método o atributo llamado set(por lo que siempre se hace referencia a ella instance.set, no es tan simple set) no es necesariamente horrible. Hay casos perfectamente legítimos para nombrar un método set; si setfuera una palabra clave, no podría hacerlo.
ShadowRanger
1
@wwii Los nombres de métodos especiales no están definidos globalmente como incorporados, o parte de la sintaxis como palabras clave. __len__por sí solo no significa nada. Tienes que decir str.__len__o list.__len__. Por lo tanto, no tiene que preocuparse de que sus nombres de variables choquen con ellos.
print = None
.Respuestas:
Para verificar que una cadena es una palabra clave, puede usarla
keyword.iskeyword
; para obtener la lista de palabras clave reservadas que puede usarkeyword.kwlist
:Si desea incluir también nombres integrados (Python 3), compruebe el
builtins
módulo :Para Python 2 necesitarás usar el
__builtin__
módulofuente
None
es formalmente una palabra clave (de acuerdo con y ), pero en realidad es una palabra clave (porque falla con a ), aunque se incluye como integrada junto con y .kwlist
iskeyword
None = 1
SyntaxError
True
False
from builtins import *
; pueden ser anulados.set = 1
es una idea terrible, pero una clase con un método o atributo llamadoset
(por lo que siempre se hace referencia a ellainstance.set
, no es tan simpleset
) no es necesariamente horrible. Hay casos perfectamente legítimos para nombrar un métodoset
; siset
fuera una palabra clave, no podría hacerlo.__len__
por sí solo no significa nada. Tienes que decirstr.__len__
olist.__len__
. Por lo tanto, no tiene que preocuparse de que sus nombres de variables choquen con ellos.