Использование переменных

В прошлом уроке мы создали несколько переменных и узнали о том, что у каждой переменной есть тип. Давайте разберемся с правилами создания переменных.

x = 10

x — это идентификатор переменной или проще говоря имя переменной, знак = — это оператор присваивания, а 10 выражение результат выполнения которого присвоится переменной с идентификатором x.

Есть такая шутка, что главная проблема программирования — это придумать как назвать переменную. Давайте разберемся с формальными и практическими правилами имен в Python:

  • идентификатор — это комбинация букв в нижнем и верхнем регистре, цифр и знака подчеркивания. Пример правильных идентификаторов my_name, Day2.
  • имя переменной не должно совпадать со специальными ключевыми словами языка программирования. Списки ключевых слов есть в документации или их можно посмотреть в модуле keyword.
  • имя переменной не может начинаться с цифры. Неправильно 2_girls.
  • Длинна имени должна начинаться от одного символа.

Причем эти правила распространяются на все виды идентификаторов. В будущих уроках мы будем создавать функции, классы и даже модули и на них тоже распространяются эти базовые правила.

Список ключевых слов можно посмотреть так:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async',
'await', 'break', 'class', 'continue', 'def', 'del', 'elif',
'else', 'except', 'finally', 'for', 'from', 'global', 'if',
'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or',
'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

А попытка использования ключевого слова в качестве переменной выдаст синтаксическую ошибку

>>> return = 1
  File "<stdin>", line 1
    return = 1
     ^
SyntaxError: invalid syntax

Практические правила имен переменных

Помимо основных правил есть еще и практические правила или традиции, которыми пользуются программисты. А также давайте рассмотрим частые ошибки, которые совершают при работе начинающие программисты.

Использование специальных символов

Есть ситуации, когда кажется логичным назвать переменную tax5%, но символы, помимо знака подчеркивания, типа !, @, #, \$, % и подобные, использовать нельзя. Они или вызовут синтаксическую ошибку, или уже имеют другое значение. В нашем примере % — это оператор получения остатка от деления, а @ имеет специальное обозначение для создания декоратора функций.

Использование русских символов

Формально допустимо использовать любые юникод-символы в названии переменных. Но на практике это приводит к большим проблемам. Например, цифровые коды латинской буквы c [си] и кирилической буквы с [эс] — разные, но отображаются они одинаковым для человеческого глаза начертанием. И это приводит к распространенной ошибке — программисты просто забывают переключить раскладку клавиатуры, и и нажимают клавишу с буквой c в русской раскладке. Вы не всегда поймете в чем тут проблема:

>>> с = 100
>>> 20 * c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined

Для того чтобы найти и исправить такую ошибку вам придется аккуратно скопировать символ и проверить его цифровой код.

>>> ord('c')
99
>>> ord('с')
1089

Разный регистр

Для человека смысл слова не меняется вне зависимости от того, в каком регистре оно записано. Ну может быть если вместо Привет написать ПРИВЕТ, то вам покажется, что на вас кричат. Но для Python'а регистр имеет большое значение. hello, Hello и даже hElLO это разные идентификторы. В связи с этим есть несколько соглашений об именовании, которые мы сейчас рассмотрим.

Константы

Бывает так что есть какая-то переменная, которая остается неизменной всегда. В таких случаях есть традиция называть такие переменные только большими латинскими буквами, например:

GRAVITY = 9.8

Тот, кто увидит такое имя, сразу поймет, что эту переменную лучше не изменять.

camelCase и snake_case

YYYY: может в заголовке нужна заглавная С?

CamelCase (или CapitalizeWords) — это один из традиционных способов записи имен, соединяя слова и начиная их с большой буквы. Например startDay. Составное слово как будто бы с напоминает спину верблюда.

snake_case — способ составлять слова путем соединения слов через знак подчеркивания.

Раньше в Python не было стандарта, и многие системные модули использовали стиль, который выбирал их автор. Но потом пришли к выводу, что единый стандарт сделает работу более комфортной и предсказуемой. В качестве стандарта был выбран snake_case для переменных и модулей, а для названий классов — CamelCase. В тех случаях, когда первое слово это аббревиатура, то она вся пишется заглавными буквами, например HTTPServerError.

Краткие имена

Часто есть соблазн сократить время и вместо полного имени записать что-то краткое. Вариант c = 10 является синтаксически верным, но count = 10 имеет лучшую читаемость и спустя время даст больше смысла. Когнитивная стоимость чтения сложного алгоритма снизится. Кроме того, редакторы обычно дают автоподсказку и экономят время набора.

Магические имена и для внутреннего использования

(YYYY: весь абзац с нетерпением ждала, когда же мне объяснят, почему имена магические и не дождалась, разочарована)

И последний пункт о традициях имен. Если имя начинается с одинарного знака подчеркивания _state, то обычно это означает, что перед нами переменная для внутреннего использования модуля или класса, и напрямую обращаться к ним не стоит. Если вы видите идентификатор, начинающийся и заканчивающийся двойным подчеркиванием, то это так называемый магический метод __repr__(). Магические методы тоже используются скрытым образом. Самое распространенное магическое имя — __init__(). Это конструктор класса и мы изучим его работу, когда будем обсуждать классы. XXX: улучшить: Для удобства лучше представлять, что эти имена используются когда Python обращается к вашему коду когда необходимо сделать определенные действия, например сложение двух чисел на самом деле вызывает магический метод __add__(). Обычно подразумевается, что программист напрямую их не использует.

Краткий итог

Чтобы выглядеть как про, используйте понятные имена переменных в snake_case и CapCase для имен классов.

Ссылки