@Abhijit: A principal diferença é que eu pedi todas as palavras reservadas, incluindo os incorporados.
Neil G
editar: aparentemente, muitas pessoas usam "palavra reservada" para ser sinônimo de palavra-chave. Eu editei a pergunta de acordo.
22415 Neil G
@ NeilG Tenho certeza de que são sinônimos em Python. Definitivamente, builtins não são palavras reservadas, pois podem ser reatribuídas, por exemplo print = None.
wjandrea 01/07
Respostas:
198
Para verificar se uma string é uma palavra-chave, você pode usar keyword.iskeyword; para obter a lista de palavras-chave reservadas, você pode usar keyword.kwlist:
Observe que no python2.6 <= xy <3.0 nãoNone é formalmente uma palavra-chave (de acordo com e ), mas na verdade é uma palavra-chave (porque falha com a ), embora esteja listada como incorporada junto com e . kwlistiskeywordNone = 1SyntaxErrorTrueFalse
Bakuriu
3
Por curiosidade, qual é a justificativa filosófica para se ter uma distinção entre palavras-chave e componentes internos? Todos eles não deveriam apenas ser reservados?
confuso
11
@ notconfusing: as palavras-chave fazem parte da gramática do idioma. Builtins agem como se você tivesse feito from builtins import *; eles podem ser substituídos.
Neil G
2
@ notconfusing: Em particular, minimizar palavras-chave significa que palavras comuns não estão desnecessariamente indisponíveis em cenários seguros . Certamente, atribuir set = 1é uma péssima idéia, mas uma classe com um método ou atributo chamado set(por isso é sempre referenciada instance.set, não tão simples set) não é necessariamente horrível. Existem casos perfeitamente legítimos para nomear um método set; se setfosse uma palavra-chave, você não poderia fazer isso.
ShadowRanger 25/09
1
@wwii Os nomes de métodos especiais não são definidos globalmente como incorporados ou parte da sintaxe como palavras-chave. __len__por si só não significa nada. Você tem que dizer str.__len__ou list.__len__. Portanto, não há preocupações com os nomes das variáveis colidindo com elas.
print = None
.Respostas:
Para verificar se uma string é uma palavra-chave, você pode usar
keyword.iskeyword
; para obter a lista de palavras-chave reservadas, você pode usarkeyword.kwlist
:Se você deseja incluir nomes internos também (Python 3), verifique o
builtins
módulo :Para Python 2, você precisará usar o
__builtin__
módulofonte
None
é formalmente uma palavra-chave (de acordo com e ), mas na verdade é uma palavra-chave (porque falha com a ), embora esteja listada como incorporada junto com e .kwlist
iskeyword
None = 1
SyntaxError
True
False
from builtins import *
; eles podem ser substituídos.set = 1
é uma péssima idéia, mas uma classe com um método ou atributo chamadoset
(por isso é sempre referenciadainstance.set
, não tão simplesset
) não é necessariamente horrível. Existem casos perfeitamente legítimos para nomear um métodoset
; seset
fosse uma palavra-chave, você não poderia fazer isso.__len__
por si só não significa nada. Você tem que dizerstr.__len__
oulist.__len__
. Portanto, não há preocupações com os nomes das variáveis colidindo com elas.