Ідентифікатори та ключові слова

Оновлено: 28.04.2023

Ідентифікатори (також згадувані як імена) описуються наступними лексичними визначеннями.

Синтаксис ідентифікаторів у Python базується на стандартному додатку Unicode UAX-31 із уточненнями та змінами, як визначено нижче; див. також PEP 3131 для отримання додаткової інформації.

У діапазоні ASCII (U+0001..U+007F) дійсні символи для ідентифікаторів такі ж, як і в Python 2.x: великі та малі літери від A до Z, символ підкреслення _ і, за винятком першого символу, цифри 0 до 9.

Python 3.0 представляє додаткові символи поза межами діапазону ASCII (див. PEP 3131). Для цих символів у класифікації використовується версія бази даних символів Unicode, яка включена в модуль unicodedata.

Довжина ідентифікаторів необмежена. Справа знакова.

identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">

Зазначені вище коди категорій Unicode означають:

Lu - великі літери Ll - малі літери Lt - заголовні літери Lm - літери-модифікатори Lo - інші букви Nl - цифри літер Mn - непробільні знаки Mc - знаки поєднання інтервалів Nd - десяткові числа Pc - розділові знаки сполучника Other_ID_Start - explicit list of characters in PropList.txt to support backwards compatibility Other_ID_Continue - так само

Під час синтаксичного аналізу всі ідентифікатори перетворюються в нормальну форму NFKC; порівняння ідентифікаторів базується на NFKC.

A non-normative HTML file listing all valid identifier characters for Unicode 14.0.0 can be found at https://www.unicode.org/Public/14.0.0/ucd/DerivedCoreProperties.txt

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