Синтаксис идентификаторов в Python 3.x основан на стандарте Unicode с доработкой и изменениями. Идентификаторы (также называемые именами переменных) описываются следующими лексическими определениями.
Символы ASCII (в диапазоне U+0001 .. U+007F) для идентификаторов такие же, как в Python 2.x:
A
до Z
; _
;Дополнительно смотрите материал "Соглашения об именах в Python"
Следующие идентификаторы используются как зарезервированные или ключевые слова языка Python 3.x и не могут использоваться как обычные идентификаторы. Они должны быть написаны точно так, как написано здесь:
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
Новое в версии 3.10.
Некоторые идентификаторы зарезервированы только в определенных контекстах. Они известны как мягкие ключевые слова. Идентификаторы match
, case
, type
и одиночное нижнее подчеркивание _
могут синтаксически выступать в качестве ключевых слов в определенных контекстах, но это различие проводится на уровне синтаксического анализатора.
Что касается мягких ключевых слов, то их использование в грамматике возможно при сохранении совместимости с существующим кодом, который использует эти имена в качестве идентификаторов.
Мягкие ключевые слова используются:
match
использует слова match
, case
и _
.type
использует слово type
.Изменено в Python 3.12: Оператор
type
теперь мягкое ключевое слово.
Определенные классы идентификаторов (помимо ключевых слов) имеют особые значения. Эти классы идентифицируются по шаблонам начальных и завершающих символов подчеркивания:
_*
: не импортирован from module import *
.
_
: одиночное нижнее подчеркивание используется:
match
в шаблоне case
- _
является мягким ключевым словом, которое обозначает подстановочный знак._
. (Он хранится в builtins
модуле вместе со встроенными функциями, такими как print.)_
является обычным идентификатором. Он часто используется для обозначения "специальных" элементов, но он не является специальным для самого Python.__*__
: Определяемые системой имена, неофициально известные как имена "dunder
". Эти имена определяются интерпретатором и его реализацией (включая стандартную библиотеку). Любое использование __*__
имен в любом контексте, которое не следует за явно документированным использованием, может быть прервано без предупреждения.
__*
: частные/приватные имена методов класса. Имена в этой категории, когда они используются в контексте определения класса, переписываются с использованием искаженной формы, чтобы избежать конфликтов имен между "частными" атрибутами базового и производного классов.