Константы, имена функций, del и NameError в Python

Обновлено:

1. Что такое константа

Константа — это переменная, значение которой не должно изменяться во время работы программы.

Например:

PI = 3.14

В переменной PI хранится число π.

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

Ещё примеры:

LESSON_PRICE = 1500
FILE_NAME = 'data.txt'
MAX_LENGTH = 100
COUNTRY_NAME = 'Georgia'

2. Как называются константы

Имена констант записываются полностью в верхнем регистре.

Обычная переменная:

lesson_price = 1500

Константа:

LESSON_PRICE = 1500

Если имя константы состоит из нескольких слов, слова разделяются нижним подчёркиванием:

FILE_NAME = 'data.txt'
MAX_TEXT_LENGTH = 100
DEFAULT_USER_NAME = 'Anna'

Правильно:

PI = 3.14
LESSON_PRICE = 1500
FILE_NAME = 'data.txt'

Неправильно для константы:

pi = 3.14
lessonPrice = 1500
FileName = 'data.txt'

3. Где создаются константы

Как правило, константы создаются в начале файла.

PI = 3.14
LESSON_PRICE = 1500
FILE_NAME = 'data.txt'

first_name = 'Anna'
age = 25

print(first_name)
print(age)

Сначала записываются константы, а после них — основной код программы.

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

Например:

constants.py

Подключение одного файла к другому будем изучать позже.


4. Можно ли изменить константу

Программист может открыть файл и вручную изменить значение константы.

Например, сначала использовалась такая точность числа π:

PI = 3.14

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

PI = 3.14159

Или изменилось название файла:

FILE_NAME = 'old_data.txt'

Программист изменил его:

FILE_NAME = 'new_data.txt'

Это изменение исходного кода самим программистом.

Во время работы программы значение константы изменяться не должно.


5. Важная особенность констант в Python

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

PI = 3.14
PI = 10

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

Запись имени полностью в верхнем регистре сообщает программистам:

Это константа. Её значение изменять не нужно.

Поэтому константа в Python — это соглашение между программистами.

Правильно:

PI = 3.14

radius = 10
circle_length = 2 * PI * radius

Неправильно:

PI = 3.14

PI = 10

6. Константа и обычная переменная

Константа используется для значения, которое не должно изменяться:

LESSON_PRICE = 1500

Обычная переменная может изменяться:

student_age = 15
student_age = 16

Ещё пример:

PI = 3.14

radius = 5
radius = 10

PI — константа.

radius — обычная переменная.


7. Нельзя использовать имена функций для переменных

Мы уже изучили две функции:

print()
len()

Имена этих функций нельзя использовать для создания своих переменных.

Неправильно:

len = 10

Неправильно:

print = 'Hello'

В этих примерах переменные перезаписывают ссылки на функции len и print.

После этого функции перестают нормально работать.


8. Что произойдёт при использовании имени len

Неправильный код:

len = 10

Теперь имя len ссылается на число 10, а не на функцию.

Поэтому такой вызов приведёт к ошибке:

len('Hello')

Функция len() больше недоступна под своим обычным именем.

Поэтому так писать нельзя:

len = 10

Лучше выбрать понятное имя:

text_length = 10

9. Что произойдёт при использовании имени print

Неправильный код:

print = 'Hello'

Теперь имя print ссылается на строку 'Hello', а не на функцию.

Поэтому такой вызов приведёт к ошибке:

print('Python')

Функция print() больше недоступна под своим обычным именем.

Лучше использовать другое имя:

message = 'Hello'
print(message)

Результат:

Hello

10. Нижнее подчёркивание после имени функции

Если очень нужно использовать имя, похожее на имя функции, в конце можно поставить нижнее подчёркивание:

len_ = 10
print_ = 'Hello'

Такие имена допустимы.

Но лучше придумать более понятные имена:

text_length = 10
message = 'Hello'

Понятное имя переменной лучше имени с нижним подчёркиванием в конце.


11. Ключевое слово del

Ключевое слово del позволяет удалить переменную.

Создадим переменную:

age = 25

Удалим её:

del age

После выполнения del age переменной age больше не существует.


12. Обращение к удалённой переменной

Пример:

age = 25

del age

print(age)

Строка:

print(age)

приведёт к ошибке NameError.

Переменная age была удалена, поэтому Python не может её найти.


13. Удаление переменной со строкой

message = 'Hello'

print(message)

del message

До удаления функция print() выведет:

Hello

После выполнения:

del message

переменной message больше не существует.


14. Удаление нескольких переменных

С помощью del можно удалить сразу несколько переменных.

a = 10
b = 20
c = 30

del a, b, c

После этого переменные a, b и c больше не существуют.

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

a = 10
b = 20
c = 30

del a, b

Переменные a и b удалены.

Переменная c продолжает существовать:

print(c)

Результат:

30

15. del и каскадное присваивание

Создадим несколько ссылок на один объект:

value = a = b = 'Hello'

Теперь переменные value, a и b ссылаются на строку 'Hello'.

Удалим переменную a:

del a

Переменная a больше не существует.

Но переменные value и b продолжают работать:

print(value)
print(b)

Результат:

Hello
Hello

Ключевое слово del удалило только ссылку a.


16. Удаление нескольких ссылок

value = a = b = 'Python'

Удалим две ссылки:

del a, b

Переменные a и b больше не существуют.

Но переменная value продолжает существовать:

print(value)

Результат:

Python

17. Удаление несуществующей переменной

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

del age

Если переменная age ранее не была создана, Python не сможет её найти.

Будет ошибка:

NameError

18. Повторное удаление переменной

Создадим и удалим переменную:

age = 25
del age

Попытаемся удалить её ещё раз:

del age

Будет ошибка NameError.

После первого удаления переменная уже не существует.


19. Переменную нужно создать до обращения к ней

Python выполняет код сверху вниз.

Поэтому переменная должна быть создана до того места, где мы к ней обращаемся.

Неправильно:

print(first_name)

first_name = 'Anna'

Будет ошибка NameError.

В момент выполнения строки:

print(first_name)

переменная first_name ещё не существует.

То, что она создаётся ниже, не помогает.


20. Правильный порядок кода

Сначала нужно создать переменную:

first_name = 'Anna'

После этого к ней можно обращаться:

print(first_name)

Полный правильный пример:

first_name = 'Anna'

print(first_name)

Результат:

Anna

21. Переменная внутри выражения

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

Неправильно:

total_price = product_price * product_count

product_price = 100
product_count = 3

Будет ошибка NameError.

Правильно:

product_price = 100
product_count = 3

total_price = product_price * product_count

print(total_price)

Результат:

300

22. Функция len() и порядок создания переменных

Неправильно:

text_length = len(text)

text = 'Hello'

Переменная text используется до её создания.

Будет ошибка NameError.

Правильно:

text = 'Hello'

text_length = len(text)

print(text_length)

Результат:

5

23. Основные правила урока

Константы:

PI = 3.14

Имена констант записываются в верхнем регистре:

LESSON_PRICE = 1500

Константы обычно создаются в начале файла или хранятся в отдельном файле.

Во время работы программы константы изменяться не должны.

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

len = 10
print = 'Hello'

Ключевое слово del удаляет переменные:

del age

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

del a, b

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

Переменные необходимо создавать до первого обращения к ним.


Домашнее задание

Часть 1. Задания в IDLE

Задание 1

Создать четыре константы:

  1. число π;
  2. стоимость урока;
  3. название файла;
  4. максимальную длину текста.

Имена констант должны быть записаны полностью в верхнем регистре.

Вывести каждую константу через отдельный вызов print().


Задание 2

Определить, какие имена правильно подходят для констант:

PI
pi
LESSON_PRICE
lesson_price
FileName
FILE_NAME
maxLength
MAX_LENGTH

Неправильные имена переписать правильно.


Задание 3

Создать переменную:

message = 'Hello'

Вывести её через print().

Затем удалить переменную:

del message

После удаления снова попробовать обратиться к ней и посмотреть, какая ошибка появится.


Задание 4

Создать три переменные с помощью множественного присваивания:

a, b, c = 10, 20, 30

Удалить переменные a и b одной строкой.

После этого вывести переменную c.


Задание 5

Создать несколько ссылок с помощью каскадного присваивания:

value = first_value = second_value = 'Python'

Удалить переменную first_value.

После этого вывести:

print(value)
print(second_value)

Объяснить, почему эти переменные продолжают работать.


Часть 2. Задания в Visual Studio Code

Задание 6. Файл с константами

Создать отдельный файл:

constants_practice.py

В начале файла создать константы:

PI = 3.14
LESSON_PRICE = 1500
FILE_NAME = 'students.txt'
MAX_TEXT_LENGTH = 100

После констант создать обычные переменные:

radius = 10
student_name = 'Anna'
text = 'Hello'

Вычислить:

circle_length = 2 * PI * radius
text_length = len(text)

Вывести через отдельные вызовы print():

  1. PI;
  2. LESSON_PRICE;
  3. FILE_NAME;
  4. MAX_TEXT_LENGTH;
  5. circle_length;
  6. student_name;
  7. text_length.

Добавить комментарии, которые отделяют константы от основного кода.


Задание 7. Имена функций

Создать отдельный файл:

function_names.py

Сначала записать неправильный пример:

len = 10

len('Hello')

Запустить файл и посмотреть, что произойдёт.

После этого исправить код:

text_length = 10

print(text_length)
print(len('Hello'))

Затем отдельно проверить неправильный пример:

print = 'Hello'

print('Python')

После проверки исправить имя переменной:

message = 'Hello'

print(message)

Задание 8. Нижнее подчёркивание после имени

В файле:

function_names.py

создать переменные:

len_ = 10
print_ = 'Hello'

Затем придумать для них более понятные имена.

Вместо len_ использовать имя, которое объясняет, что хранится в переменной.

Вместо print_ также использовать понятное имя.


Задание 9. Удаление переменных

Создать отдельный файл:

delete_variables.py

Создать переменные:

first_name = 'Anna'
last_name = 'Ivanova'
age = 25
lesson_price = 1500

Вывести все переменные.

Затем удалить:

del age, lesson_price

После удаления вывести только оставшиеся переменные.


Задание 10. Удаление ссылок

В файле:

delete_variables.py

добавить код:

value = first_text = second_text = 'Hello'

Удалить переменную first_text.

Вывести value и second_text.

Затем удалить обе оставшиеся переменные одной строкой.


Задание 11. Ошибка NameError

Создать отдельный файл:

name_error_practice.py

Записать неправильный код:

print(city)

city = 'Mestia'

Запустить файл и посмотреть ошибку.

После этого исправить порядок строк:

city = 'Mestia'

print(city)

Задание 12. Переменная в выражении

В файле:

name_error_practice.py

сначала записать неправильный код:

total_price = product_price * product_count

product_price = 250
product_count = 4

print(total_price)

Запустить программу и посмотреть ошибку.

После этого переставить строки в правильном порядке.

Ожидаемый результат после исправления:

1000

Задание 13. len() и порядок строк

Записать неправильный код:

text_length = len(text)

text = 'Programming'

print(text_length)

Объяснить причину ошибки.

После этого исправить порядок строк и запустить программу.


Часть 3. Итоговая задача

Задание 14

Создать отдельный файл:

lesson_five_task.py

В программе нужно:

  1. в начале файла создать три константы;
  2. использовать только правильные имена в верхнем регистре;
  3. добавить комментарий с описанием каждой константы;
  4. создать три обычные переменные с помощью множественного присваивания;
  5. создать две переменные с одинаковым значением с помощью каскадного присваивания;
  6. использовать функцию len() для определения длины строки;
  7. вывести значения через отдельные вызовы print();
  8. удалить одну переменную с помощью del;
  9. удалить ещё две переменные одной строкой;
  10. не использовать имена len и print для собственных переменных;
  11. расположить все строки в правильном порядке, чтобы не возникла ошибка NameError.