В Python, как и в остальных языках программирования, есть переменные. Переменные в Python представлены объектами. Точнее для доступа к объекту используются переменные. При инициализации переменной (которая происходит при первом присваивании значения) в самой переменной сохраняется ссылка на объект - адрес объекта в памяти.
У каждой переменной должно быть уникальное имя, позволяющее однозначно идентифицировать объект в памяти. Имя переменной может состоять из латинских букв, цифр и знаков подчеркивания. Не смотря на то, что имена переменных могут содержать цифры, они не могут начинаться с цифры.
Также в именах переменной нужно избегать использования знака подчеркивания в качестве первого символа имени, поскольку такие имена имеют специальное значение. Имена, начинающиеся с символа подчеркивания (например, _name), не импортируются из модуля с помощью инструкции from module import *, а имена, имеющие по два символа подчеркивания (например, _name_) в начале и конце, имеют особый смысл для интерпретатора.
В качестве имени переменной нельзя использовать ключевые слова. Просмотреть список ключевых слов можно с помощью следующих инструкций:
>>> import keyword >>> keyword.kwlist
Кроме ключевых слов в качестве имени переменных не нужно использовать встроенные идентификаторы. Конечно, такие идентификаторы можно переопределить, но конечный результат будет не таким, как вы ожидаете.
Получить список встроенных идентификатор можно с помощью следующих команд:
>>> import builtins >>> dir(builtins) ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAЬortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'Keyboardinterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotADirectoryError', 'Notimplemented', 'NotimplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'Stopiteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', build class loader 'ZeroDivisionError', _debug_ doc name _package import spec_ 'abs', 'all', 'any', 'bytes', 'callaЬle', 'ascii', 'Ьin', 'bool', 'bytearray', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credi ts', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'ехес', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
Итак, если подытожить, то можно выделить следующие правила:
Имя (идентификатор) может начинаться с латинской буквы любого регистра, после которой можно использовать цифры. Пример правильных имен переменных: q1, result1, а, Х, MyVar
Имя переменной не может начинаться с цифры. Пример неправильных имен переменных: 1q, 1result
Имя переменной может начинаться с символа подчеркивания, но такие имена имеют специальное значение для интерпретатора. Примеры таких имен: _resource, _resource
Имя переменной не может быть ключевым словом
Лучше не переопределять встроенные идентификаторы
Имя переменной должно быть уникальным в пределах пространства имен
Примечание. Теоретически, имя переменной может содержать символы национальных алфавитов, но лучше такие имена не использовать.
Немного забегая вперед, хочется поговорить о пространствах имен. В любой точке программы есть доступ к трем пространствам имен (namespaces): локальному, глобальному и встроенному. В других языках программирования они также называются областями видимости.
Сложность скриптовых (интерпретируемых) языков программирования вроде РНР и Python заключается в том, что переменную можно объявить в любой части программы. В результате вы можете не заметить, как переменные в разных пространствах имен просто перемешались, не забыть об объявлении переменной и т.д. Например, в том же языке Pascal переменные объявляются в блоке Var, который вынесен за пределы основного блока кода. Рассмотрим небольшой пример программы на Pascal:
prograrn VarTest;
var
а, Ь : real;
function sum(a : real; b : real): real;
var
res : real;
begin
res ·= а + Ь;
surn ·= res;
end;
begin
а : = 2; Ь : = 2;
writeln(surn(a, Ь);
end.
Четно видно, что переменные а и Ь являются глобальными, поскольку определены за пределами какой-либо функции, а переменная res является локальной, поскольку она объявлена в функции surn. В принципе, без нее можно было бы обойтись, но нужен был пример локальной переменной, а усложнять код не хотелось.
В Python также есть понятие глобальной и локальной переменной. Локальными считаются переменные, объявленные внутри функции ( о функциях мы поговорим позднее). Простота Pascal (и многих других переменных) в том, что переменные объявляются в одном блоке (var)1 при этом жестко определен тип переменной.
В Python (как и в РНР) все иначе. Какого-либо оператора или блока объявления переменной просто не существует. Объявлением переменной считается присваивание ей значения. Вот у вас может быть программа на 2000 строк и переменная res, хранящая результат, может встречаться лишь в предпоследней строке. И это будет правильно с точки зрения Python.
С типом переменной тоже не все так просто. Если в С типы определяются жестко - при объявлении переменной, то в Python типы плавающие:
>>> х = 1
>>> х = "test"
>>> print(x) test
>>>
Сначала переменная х была у нас целым числом. Затем она превратилась в строку со значением "test". Попробуйте вы проделать такое в Pascal или С - вы получите ошибку несоответствия типа - ну нельзя переменной, которая была изначально запланирована для хранения числа, присвоить строку. В Python такое возможно, что тоже не добавляет ясности вашим программам. Поэтому при использовании переменных в Python нужно быть очень внимательным.
Я рекомендую, особенно начинающим программистам, объявлять все необходимые переменные в начале вашей программы путем присваивания им начальных значений. Если начального значения нет, используйте О для числа или "" для строки. Также комментируйте назначение переменных, если по их имени нельзя однозначно сказать, для чего они предназначены. Так вам будет гораздо проще и вы привыкните к некоторой дисциплине.
Также рассмотрим некоторые рекомендации, позволяющие навести порядок в вашем коде и сделать его более удобным для чтения и поддержки в будущем:
1. Хотя переменную можно объявить в любом месте программы, но до первого использования, рекомендуется объявлять переменные в начале программы. Там же можно произвести инициализацию переменных. Об этом мы только что говорили.
2. Неплохо бы снабдить переменные комментариями, чтобы в будущем не забыть, для чего используется та или иная переменная.
3. Имя переменной должно описывать ее суть. Например, о чем нам говорит переменная s? Это может быть все, что угодно и сумма (summ), и счет (score) и просто переменная-счетчик, когда вы вместо i почему-то используете s. Когда же вы называете переменную score, сразу становится понятно, для чего она будет использоваться.
4. Придерживайтесь одной и той же схемы именования переменных. Например, если вы уже назвали переменную high_score (нижний регистр и знак подчеркивания), то переменную, содержащую текущий счет пользователя называйте user_score, но никак не userScore. С синтаксической точки зрения никакой ошибки здесь нет, но код будет красивее, когда будет использоваться одна схема именования переменных.
5. Традиции языка Python рекомендую начинать имя переменной со строчной буквы и не использовать знак подчеркивания в качестве первого символа в имени переменной. Все остальное - считается дурным тоном.
6. Не создавайте слишком длинные имена переменных. В таких именах очень легко допустить опечатку, что не очень хорошо. Да и длинные имена переменных сложно "тянуть" за собой. Если нужно использовать в одной строке несколько переменных, то длинные названия будут выходить за ширину экрана. Максимальная рекомендуемая длина имени переменной - 15 символов.