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

обложка статьи

Всем привет!

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

Объявление переменных

Во первых стоит отметить что Python является языком с динамической типизацией. Это означает что любая переменная может содержать любые значение. Это отличается от тех же переменных, например, в C++. Там нужно явно указывать тип, значение которого будет содержать переменная.

Теперь давайте посмотрим как мы можем создать переменную и присвоить ей значение:

foo = 1
bar = 'baz'

print('Result:', bar)

В данном примере мы создаем две переменные: foo и bar. Первая переменная содержит число, а вторая строку. Подробнее о типах в Python в следующем уроке. Как видите, для того чтобы присвоить переменной значение достаточно слева от оператора = указать ее имя, а с права ее значение. Если во время присваивания такой переменной нет, то интерпретатор Python’a создаст новую переменную с указанным именем и присвоит ей указанное значение.

Переменные в Python следует именовать в нижнем регистре и слова разделять нижним подчеркиванием: _. Например: max_age, init_state.

После объявления переменной мы можем ее использовать в любом выражении. В нашем примере, мы передали переменную bar в функцию print().

Вот результат работы программы:

Result: 1

Мы также можем указать значение для нескольких переменных за одну операцию:

a, b, c = 1, 1 + 1, 'three'

В итоге мы получим следующие:

  • a: значение 1 типа int
  • b: два числа будут просуммированы и результат (2) будет записан в b
  • c: в данном случае мы просто запишем строку в c

Данная операция называться деструктуризация и ее мы подробнее рассмотрим в уроке про списки в Python. Сейчас важно знать, что данная операцию может быть выполнена в три действия с тем же результатом:

a = 1
b = 1 + 1
c = 'three'

Теперь давайте рассмотрим в каком случае Python будет создавать новую переменную, а в каком будет использовать существующую.

Область видимости переменной

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

На данный момент вы можете думать о функциях как о кусочке кода, который может быть вызван по необходимости. Например:

def my_function():
  a = 1
  # some logic
  print(a)

my_function() # выводит 1
my_function() # выводит 1

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

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

Локальные переменные

По умолчанию, все переменные объявляются как локальные. Это значит, что переменная будет видна только из той же функции где была объявлена (кроме случаев когда мы объявляем переменные на верхнем уровне, тогда переменная будет видна из всего файла). Пример:

a = 1

def f():
  a = 2
  print(a)

f()
print(a)

Выполнив данный код вы увидите следующие:

2
1

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

Глобальные переменные (global)

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

a = 1

def f():
  global a
  a = 2
  print(a)

f()
print(a)

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

Использование переменной внешней функции (nonlocal)

Также есть возможность указать что должна использоваться переменная из родительского контекста. То есть мы не объявляем новую переменную внутри функции, а используем уже существующею (при этом не обязательно глобальную). Пример:

a = 1
def f1():
  a = 2
  def f2():
    nonlocal a
    a = 3
    print(a) # выводит 3
  f2()
  print(a) # выводит 3

f1()
print(a) # выводит 1

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

Константы

В Python нет неизменяемых переменных, однако есть соглашение. Принято записывать название переменной в верхнем регистре если она должна использоваться только для чтения. Пример:

UP = 1
RIGHT = 2
DOWN = 3
LEFT = 4

Операторы присваивания

В Python для увеличения скорости написания кода предусмотрены сокращения для часто используемых операторов:

  • += тоже что x = x + ...
  • -= тоже что x = x - ...
  • *= тоже что x = x * ...
  • /= тоже что x = x / ...
  • %= тоже что x = x % ...

Пример:

a = 2
a *= 3
a -= 1
print(a) # выводит 5

Задание

В рамках данного урока поэкспериментируйте с переменными. Попробуйте разные операторы, такие как +, -, * и т.д.

Обсуждение