В Python идентификаторите (имената на променливи, функции, класове и т.н.) трябва да бъдат дефинирани според правила. Имена, които не следват правилата, не могат да се използват като идентификатори и водят до грешка.
Тук се предоставя следната информация.
- Символи, които могат и не могат да се използват в идентификатори (имена)
- ASCII символи
- Символ на Unicode
- нормализация (напр. в математиката)
- Проверка дали низът е валиден идентификатор:
isidentifier()
- Думи, които не могат да се използват като идентификатори (имена) (запазени думи)
- Думи, които не трябва да се използват като идентификатори (имена)
- Конвенция за именуване за PEP8
Следващото описание е дадено за Python 3 и може да е различно за Python 2.
- Символи, които могат и не могат да се използват в идентификатори (имена)
- Проверка дали низът е валиден идентификатор: isidentifier()
- Думи, които не могат да се използват като идентификатори (имена) (запазени думи)
- Думи, които не трябва да се използват като идентификатори (имена)
- Конвенция за именуване за PEP8
Символи, които могат и не могат да се използват в идентификатори (имена)
Посочва знаците, които могат и не могат да се използват като идентификатори (имена).
Освен това, въпреки че има много неща, за които да се пише, основно трябва да запомните следното.
- Използвайте главни и малки букви, цифри и подточки.
- Първата (първа) буква не може да бъде число.
ASCII символи
ASCII символите, които могат да се използват като идентификатори (имена), са главни и малки букви (A~Z,a~z), цифри (0~9) и долна черта (_). Азбуката е чувствителна към големи и малки букви.
AbcDef_123 = 100
print(AbcDef_123)
# 100
Не могат да се използват символи, различни от долна черта.
# AbcDef-123 = 100
# SyntaxError: can't assign to operator
Освен това числата не могат да се използват в началото (първата буква).
# 1_abc = 100
# SyntaxError: invalid token
В началото могат да се използват и долни тирета.
_abc = 100
print(_abc)
# 100
Имайте предвид обаче, че подчертаването в началото може да има специално значение.
Символ на Unicode
От Python 3 могат да се използват и символи Unicode.
変数1 = 100
print(変数1)
# 100
Не всички символи на Unicode могат да се използват, а в зависимост от категорията на Unicode някои не могат да се използват. Например, не могат да се използват символи като препинателни знаци и пиктограми.
# 変数。 = 100
# SyntaxError: invalid character in identifier
# ☺ = 100
# SyntaxError: invalid character in identifier
Вижте официалната документация за кодовете на категориите Unicode, които могат да се използват.
В много случаи използването на китайски йероглифи и т.н. няма предимство, просто защото могат да се използват и Unicode символи (без грешка).
нормализация (напр. в математиката)
Символите Unicode се преобразуват в нормализираната форма NFKC за интерпретация. Например, буквите с пълна ширина се преобразуват в буквите с половин ширина (ASCII символи).
Имайте предвид, че дори изходният код да показва различен дисплей, той се счита за същия обект и ще бъде презаписан.
ABC = 100
ABC = -100
print(ABC)
# -100
print(ABC)
# -100
print(ABC is ABC)
# True
Проверка дали низът е валиден идентификатор: isidentifier()
Дали даден низ е валиден като идентификатор или не, може да се провери с метода isidentifier().
Той връща true, ако е валиден като идентификатор, и false, ако е невалиден.
print('AbcDef_123'.isidentifier())
# True
print('AbcDef-123'.isidentifier())
# False
print('変数1'.isidentifier())
# True
print('☺'.isidentifier())
# False
Думи, които не могат да се използват като идентификатори (имена) (запазени думи)
Има някои думи (запазени думи), които не могат да се използват като идентификатори, дори ако са валидни низове като идентификатори (имена).
Тъй като запазената дума е валиден низ като идентификатор, функцията isidentifier() връща true, но ако се използва като идентификатор, възниква грешка.
print('None'.isidentifier())
# True
# None = 100
# SyntaxError: can't assign to keyword
За да получите списък със запазени думи и да проверите дали даден низ е запазена дума, използвайте модула за ключови думи на стандартната библиотека.
Думи, които не трябва да се използват като идентификатори (имена)
Например имената на вградените функции на Python могат да се използват като идентификатори, така че можете да им присвоявате нови стойности като променливи.
Например len() е вградена функция, която връща броя на елементите в списък или броя на символите в низ.
print(len)
# <built-in function len>
print(len('abc'))
# 3
Ако присвоите нова стойност на това име len, оригиналната функция ще бъде презаписана и ще стане неизползваема. Обърнете внимание, че при присвояване на нова стойност няма да бъдат изписани грешка или предупреждение.
print(len('abc'))
# 3
len = 100
print(len)
# 100
# print(len('abc'))
# TypeError: 'int' object is not callable
Друга често срещана грешка е да се използва list = [0, 1, 2], което прави невъзможно използването на list(). Бъдете внимателни.
Конвенция за именуване за PEP8
PEP е съкращение от Python Enhancement Proposal (Предложение за подобрение на Python) – документ, в който се описват нови функции и други аспекти на Python.
PEP stands for Python Enhancement Proposal. A PEP is a design document providing information to the Python community, or describing a new feature for Python or its processes or environment.
PEP 1 – PEP Purpose and Guidelines | Python.org
PEP8 е осмият и описва „Ръководство за стила на кода на Python“, т.е. ръководството за стила на Python.
Посочени са и конвенциите за именуване.
За повече подробности вижте връзката по-горе, но например се препоръчва следният стил на писане.
- Модул
lowercase_underscore
- Малки букви + долна черта
- Пакет
lowercase
- всички малки букви
- Класове, изключения
CapitalizedWords
(CamelCase
)- Първата буква на думата се изписва с главна буква, без подчертаване
- Функции, променливи и методи
lowercase_underscore
- Малки букви + долна черта
- постоянна
ALL_CAPS
- Големи букви + долна черта
Ако обаче вашата организация няма собствени конвенции за именуване, се препоръчва да следвате PEP8.