@Abhijit: Главное отличие в том, что я попросил все зарезервированные слова, включая встроенные.
Нил Г
редактировать: очевидно, многие люди используют «зарезервированное слово», чтобы быть синонимом ключевого слова. Я отредактировал вопрос соответственно.
Нил Дж
@NeilG Я уверен, что это синонимы в Python. Встроенные слова определенно не являются зарезервированными словами, так как они могут быть переназначены, например print = None.
wjandrea
Ответы:
198
Чтобы убедиться, что строка является ключевым словом, вы можете использовать keyword.iskeyword; чтобы получить список зарезервированных ключевых слов, которые вы можете использовать keyword.kwlist:
Обратите внимание , что в python2.6 <= х <3,0 Noneявляется не формально ключевым словом (по kwlistи iskeyword) , но это на самом деле ключевому слову (потому что None = 1терпит неудачу с SyntaxError), хотя она указана в качестве встроенной вместе с Trueи False.
Бакуриу
3
Просто из любопытства, каково философское обоснование различия между ключевыми словами и встроенными функциями? Разве они не должны быть просто защищены?
смущает
12
@ notconfusing: ключевые слова являются частью грамматики языка. Встроенные действуют, как если бы вы сделали from builtins import *; они могут быть отменены.
Нил Г
2
@notconfusing: В частности, минимизация ключевых слов означает, что общие слова не являются излишне недоступными в безопасных сценариях. Конечно, назначение set = 1- ужасная идея, но класс с именем метода или атрибута set(поэтому на него всегда ссылаются instance.set, а не как на простом set) не обязательно ужасен. Есть совершенно законные случаи для именования метода set; Если бы setбыло ключевое слово, вы не могли бы сделать это.
ShadowRanger
1
@wwii Имена специальных методов не определяются глобально, как встроенные, или не являются частью синтаксиса, как ключевые слова. __len__сам по себе ничего не значит. Вы должны сказать str.__len__или list.__len__. Так что не стоит беспокоиться о том, что имена ваших переменных сталкиваются с ними.
print = None
.Ответы:
Чтобы убедиться, что строка является ключевым словом, вы можете использовать
keyword.iskeyword
; чтобы получить список зарезервированных ключевых слов, которые вы можете использоватьkeyword.kwlist
:Если вы хотите включить встроенные имена , а также (Python 3), а затем проверить на
builtins
модуль :Для Python 2 вы должны будете использовать в
__builtin__
модульисточник
None
является не формально ключевым словом (поkwlist
иiskeyword
) , но это на самом деле ключевому слову (потому чтоNone = 1
терпит неудачу сSyntaxError
), хотя она указана в качестве встроенной вместе сTrue
иFalse
.from builtins import *
; они могут быть отменены.set = 1
- ужасная идея, но класс с именем метода или атрибутаset
(поэтому на него всегда ссылаютсяinstance.set
, а не как на простомset
) не обязательно ужасен. Есть совершенно законные случаи для именования методаset
; Если быset
было ключевое слово, вы не могли бы сделать это.__len__
сам по себе ничего не значит. Вы должны сказатьstr.__len__
илиlist.__len__
. Так что не стоит беспокоиться о том, что имена ваших переменных сталкиваются с ними.