Назначение переменной в python

Переменные в Python

В предыдущем руководстве поBasic Data Types in Python вы видели, как могут быть созданы значения различных типов данных Python. Но пока что все показанные значения были буквальными или постоянными значениями:

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

Here’s what you’ll learn in this tutorial: Вы узнаете, как каждый элемент данных в программе Python может быть описан абстрактным терминомobject, и вы узнаете, как управлять объектами, используя символические имена, называемыеvariables.

Бесплатная загрузка PDF: Шпаргалка по Python 3

__ Take the Quiz: Проверьте свои знания с помощью нашей интерактивной викторины «Переменные Python». По окончании вы получите оценку, чтобы вы могли отслеживать прогресс в обучении с течением времени:

Назначение переменной

Думайте о переменной как об имени, прикрепленном к определенному объекту. В Python переменные не нужно объявлять или определять заранее, как это происходит во многих других языках программирования. Чтобы создать переменную, вы просто назначаете ей значение, а затем начинаете использовать его. Присваивание выполняется с помощью единственного знака равенства ( = ):

Это читается или интерпретируется как « n присвоено значение 300 ». Как только это будет сделано, n можно использовать в операторе или выражении, и его значение будет заменено:

Так же, как буквальное значение может отображаться непосредственно из приглашения интерпретатора в сеансе REPL без необходимости в print() , так и переменная:

Позже, если вы измените значение n и снова воспользуетесь им, вместо него будет подставлено новое значение:

>>> n = 1000 >>> print(n) 1000 >>> n 1000

Python также позволяет присваивать цепочки, что позволяет присваивать одно и то же значение нескольким переменным одновременно:

>>> a = b = c = 300 >>> print(a, b, c) 300 300 300

Цепное присвоение, приведенное выше, назначает 300 одновременно переменным a , b и c .

Типы переменных в Python

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

Переменные в Python не подпадают под это ограничение. В Python переменной может быть присвоено значение одного типа, а затем позднее переназначено значение другого типа:

>>> var = 23.5 >>> print(var) 23.5 >>> var = "Now I'm a string" >>> print(var) Now I'm a string

Ссылки на объекты

Что на самом деле происходит, когда вы назначаете переменную? Это важный вопрос в Python, потому что ответ несколько отличается от того, что вы найдете во многих других языках программирования.

Python оченьobject-oriented language. Фактически, практически каждый элемент данных в программе на Python является объектом определенного типа или класса. (Этот пункт будет повторяться много раз в течение этих уроков.)

При представлении оператора print(300) интерпретатор делает следующее:

Вы можете видеть, что целочисленный объект создается с помощью встроенной функции type() :

Переменная Python — это символическое имя, которое является ссылкой или указателем на объект. Как только объект назначен переменной, вы можете ссылаться на объект по этому имени. Но сами данные все еще содержатся в объекте.

Это назначение создает целочисленный объект со значением 300 и присваивает переменной n , указывающей на этот объект.

Следующий код проверяет, что n указывает на целочисленный объект:

Теперь рассмотрим следующее утверждение:

Что происходит, когда он выполняется? Python не создает другого объекта. Он просто создает новое символическое имя или ссылку m , которая указывает на тот же объект, на который указывает n .

Далее, предположим, что вы делаете это:

Теперь Python создает новый целочисленный объект со значением 400 , и m становится ссылкой на него.

Наконец, предположим, что этот оператор выполняется следующим образом:

Теперь Python создает строковый объект со значением «foo» и ссылается на него n .

Больше нет ссылки на целочисленный объект 300 . Он осиротел, и нет возможности получить к нему доступ.

Учебные пособия в этой серии иногда ссылаются на время жизни объекта. Жизнь объекта начинается с момента его создания, когда создается хотя бы одна ссылка на него. В течение времени жизни объекта, как вы видели выше, могут создаваться дополнительные ссылки на него, а также ссылки на него. Объект остается живым, пока на него есть хотя бы одна ссылка.

Когда количество ссылок на объект падает до нуля, он больше не доступен. В этот момент его время жизни истекло. В конечном итоге Python заметит, что он недоступен, и освободит выделенную память, чтобы ее можно было использовать для чего-то другого. На компьютерном жаргоне этот процесс обозначается какgarbage collection.

Идентичность объекта

В Python каждому создаваемому объекту присваивается номер, который однозначно его идентифицирует. Гарантируется, что никакие два объекта не будут иметь одинаковый идентификатор в течение любого периода, в течение которого их время жизни перекрывается. Как только счетчик ссылок на объект упадет до нуля и он будет обработан сборщиком мусора, как это произошло с объектом 300 выше, его идентификационный номер становится доступным и может использоваться снова.

Встроенная функция Python id() возвращает целочисленный идентификатор объекта. Используя функцию id() , вы можете убедиться, что две переменные действительно указывают на один и тот же объект:

>>> n = 300 >>> m = n >>> id(n) 60127840 >>> id(m) 60127840 >>> m = 400 >>> id(m) 60127872

После присвоения m = n , m и n оба указывают на один и тот же объект, что подтверждается тем фактом, что id(m) и id(n) возвращают одно и то же число. После переназначения m на 400 , m и n указывают на разные объекты с разными идентификаторами.

Deep Dive: кэширование небольших целочисленных значений

Из того, что вы теперь знаете о назначении переменных и ссылках на объекты в Python, следующее, вероятно, вас не удивит:

>>> m = 300 >>> n = 300 >>> id(m) 60062304 >>> id(n) 60062896

С помощью оператора m = 300 Python создает целочисленный объект со значением 300 и устанавливает m в качестве ссылки на него. Затем n аналогичным образом присваивается целочисленному объекту со значением 300 , но не тому же объекту. Таким образом, они имеют разные идентификаторы, что вы можете проверить по значениям, возвращаемым id() .

>>> m = 30 >>> n = 30 >>> id(m) 1405569120 >>> id(n) 1405569120

Здесь m и n отдельно назначаются целочисленным объектам, имеющим значение 30 . Но в этом случае id(m) и id(n) идентичны!

В целях оптимизации интерпретатор создает объекты для целых чисел в диапазоне [-5, 256] при запуске, а затем повторно использует их во время выполнения программы. Таким образом, когда вы назначаете отдельные переменные целочисленному значению в этом диапазоне, они фактически ссылаются на один и тот же объект.

Имена переменных

В примерах, которые вы видели до сих пор, использовались короткие и лаконичные имена переменных, например m и n . Но имена переменных могут быть более подробными. На самом деле, обычно это выгодно, потому что это делает назначение переменной более очевидным на первый взгляд.

Официально имена переменных в Python могут быть любой длины и могут состоять из прописных и строчных букв ( A-Z , a-z ), цифр ( 0-9 ) и символа подчеркивания ( _ с). Дополнительное ограничение заключается в том, что хотя имя переменной может содержать цифры, первый символ имени переменной не может быть цифрой.

Note: Одним из дополнений к Python 3 была полная поддержка Unicode, которая также позволяет использовать символы Unicode в имени переменной. Вы узнаете о Unicode более подробно в следующем уроке.

Например, все перечисленные ниже являются допустимыми именами переменных:

>>> name = "Bob" >>> Age = 54 >>> has_W2 = True >>> print(name, Age, has_W2) Bob 54 True

Но это не так, потому что имя переменной не может начинаться с цифры:

>>> 1099_filed = False SyntaxError: invalid token

Обратите внимание, что случай является значительным. Строчные и прописные буквы не совпадают. Использование символа подчеркивания также важно. Каждое из следующих значений определяет разные переменные:

>>> age = 1 >>> Age = 2 >>> aGe = 3 >>> AGE = 4 >>> a_g_e = 5 >>> _age = 6 >>> age_ = 7 >>> _AGE_ = 8 >>> print(age, Age, aGe, AGE, a_g_e, _age, age_, _AGE_) 1 2 3 4 5 6 7 8

Ничто не мешает вам создать две разные переменные в одной программе под названием age и Age , или, если на то пошло, agE . Но это, вероятно, опрометчиво. Конечно, это может запутать любого, кто пытается прочитать ваш код, и даже вас самих, после того, как вы от него отошли.

Целесообразно дать переменной достаточно информативное имя, чтобы понять, для чего она используется. Например, предположим, что вы подсчитываете количество людей, окончивших колледж. Вы можете выбрать любой из следующих вариантов:

>>> numberofcollegegraduates = 2500 >>> NUMBEROFCOLLEGEGRADUATES = 2500 >>> numberOfCollegeGraduates = 2500 >>> NumberOfCollegeGraduates = 2500 >>> number_of_college_graduates = 2500 >>> print(numberofcollegegraduates, NUMBEROFCOLLEGEGRADUATES, . numberOfCollegeGraduates, NumberOfCollegeGraduates, . number_of_college_graduates) 2500 2500 2500 2500 2500

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

С другой стороны, они не обязательно одинаково разборчивы. Как и во многих вещах, это вопрос личных предпочтений, но большинству людей было бы сложнее читать первые два примера, где все буквы собраны вместе, особенно один из всех заглавных букв. Наиболее часто используемые методы построения имени переменной из нескольких слов — это последние три примера:

  • Camel Case: Второе и последующие слова пишутся с заглавной буквы, чтобы границы слов было легче увидеть. (Предположительно, в определенный момент кого-то поразило, что заглавные буквы, разбросанные по всему имени переменной, смутно напоминают верблюжьих горбов.)

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

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

Style Guide for Python Code, также известный какPEP 8, содержитNaming Conventions, в котором перечислены рекомендуемые стандарты для имен различных типов объектов. ПКП 8 включает в себя следующие рекомендации:

  • Snake Case следует использовать для функций и имен переменных.
  • Pascal Case должен использоваться для имен классов. (PEP 8 именует это как «CapWords».)

Зарезервированные слова (ключевые слова)

Есть еще одно ограничение на имена идентификаторов. Язык Python резервирует небольшой набор ключевых слов, которые обозначают специальные языковые функции. Ни один объект не может иметь того же имени, что и зарезервированное слово.

В Python 3.6 есть 33 зарезервированных ключевых слова:

Источник

Читайте также:  Javascript свойства объекта windows
Оцените статью