Змінні
Замість епіграфу: Коли дружина програміста народила двійню щоб не заморочуватись він назвав дітей new_daughter1 і new_daughter2
Змінна (variable) — об'єкт програми, що має ім'я та значення.
Усі дані у комп'ютері зберігаються у пам'яті. Щоб отримати доступ до даних нам необхідно знати де саме у пам'яті вони знаходяться. Пам'ять комп'ютера поділена на комірки, і кожна комірка має свій номер. Отже у якості місця у пам'яті можна вказати її номер (адрес). На самому початку розвитку комп'ютерної техніки люди писали програми у машиних кодах, тобто у прямих інструкціях для процесора, і місцезнаходження даних так і визначали — вказуючи їх адрес у пам'яті. Це була дуже кропітка і складна робота, припуститись помилки було дуже легко. Згодом була написана програма Асемблер (Assembler, складальник), яка отримувала програму у текстовому вигляді і перекодувала її у машині коди для процесора. Програма складалась з інструкцій для процесора, але вже у більш зрозумілому для людини вигляді. А для звернення до певної комірки пам'яті замість адреси комірки почали використовувати мнемонічні імена. Це набагато полегшило процес розробки програм, а правила представлення машиних команд у текстовому вигляді назвали "мова Асемблера". Можна сказати що мова Асемблера — це перша мова програмування.
З розвитком мов програмування вони дедалі ставали усе вищого рівня, тобто такими, які ближче до людської мови ніж до команд для процесора. І для звернення до даних у пам'яті з'явилось таке поняття як змінна.
У різних мовах програмування принципи роботи зі змінними можуть дещо відрізнятись. Для початку припустимось ствердження що змінна — це певне ім'я, яке ми можемо пов'язати з певними даними, і для доступу до останніх ми можемо використовувати це ім'я.
Змінні у Python
Щоб пов'язати дані з іменем використовують операцію присвоєння. В Python ця операція позначається знаком "дорівнює". Зліва від знаку "=" вказують ім'я (змінну), а праворуч — дані які треба пов'язати з цим ім'ям. Наприклад:
quantity = 7
Цей вираз означає що до даних які дорівнюють числу 7 ми будемо звертатись за ім'ям quantity.
А читається цей вираз так: "Змінній quantity присвоєно значення 7".
Іменування змінних
Імена змінним у Python можна давати підпорядковуючись певним правилам:
- ім'я може містити букви, цифри, символ підкреслення (_)
- ім'я не може починатись з цифри
- ім'я не може співпадати з одним з ключових слів (словами які використовуються у мові програмування Python)
- імена чутливі до регістру
Список ключових слів можна дізнатись виконавши в інтерактивному режимі спеціальну команду:
>>> help('keywords')
...
False class from or
None continue global pass
True def if raise
and del import return
as elif in try
assert else is while
async except lambda with
await finally nonlocal yield
break for not
>>>
Часто імена змінних включають у себе декілька слів. Наприклад, «ім'я користувача».
У різних мовах застосовують різні стилі іменування, ось основні:
- camelCase — перше слово з маленької букви, усі наступні — з великої
- snake_case — усі слова з маленької букви, розділяють символом підкреслення
- kebab-case — усі слова з маленької букви, розділяють символом дефіса
- PascalCase — усі слова з великої букви
Змінні в Python іменують в стилі snake_case. Усі слова — англійською мовою.
user_name
Серед розробників є жарт: «саме складне у програмуванні — назви змінних і інвалідація кеша». Придумати назву дійсно деколи складно. Як би ви назвали змінну, у якій зберігається кількість неоплачених замовлень від клієнтів, які мають заборгованість у минулому кварталі?
Але все ж намагайтесь давати змінним осмислені імена які відносяться до даних, на які вони вказують. З часом, вивчаючи чужий код, ви сформуєте правильні поняття іменування.
Використання змінних в інтерактивній консолі
У консолі ми вже можемо давати команди інтерпретатору присвоїти змінним певні значення. А щоб дізнатись значення змінної достатньо ввести її ім'я.
Приклад:
>>> usd_rate = 26
>>> usd = 10
>>> uah = usd_rate * usd
>>> uah
260
>>> usd_rate
26
У Python можна робити множинне присвоювання:
a = b = c = 8
Коли ми присвоюємо змінній певне значення вперше, говорять що ми проініціалізували змінну, а така дія називається ініціалізація.
Щоб використовувати будь-яку змінну її треба спочатку ініціалізувати. Якщо ж ми спробуємо отримати значення непроініціалізованої змінної, то інтерпретатор повідомить нам що ми припустились помилки, або ж у термінах Python що "виникла вийняткова ситуація". Інформація про вияйняткову ситуацію починається рядком
Traceback (most recent call last):
а як правило останній рядок пояснює нам що саме спричинило вийняткову ситуацію.
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
У даному випадку рядок
NameError: name 'a' is not defined
можна прочитати як:
Помилка імені: ім'я 'a' не визначене.
Тобто ми намагались отримати значення змінної a але не проініцілізували її перед цим.
Детальніше про вийняткові ситуації та що з ними робити коли вони виникають ми дізнаємось у подальшому.
Константи
Деякі дані, такі як математичні постійні, ніколи не змінюються. Наприклад число "пі". Наближено воно завжди дорівнє 3.14 і не може змінюватись. Такі дані називають константами.
В Python немає спеціального механізму для визначення констант. Створення константи не відрізняється від створення змінної. Але є домовленість: константи прийнято іменувати буквами у верхньому регістрі.
PI = 3.14159
Завдання
Завдання 1
Відповідь надати у текстовому файлі у кодуванні UTF-8.
Нижче наведені імена змінних, по одному у кожному рядку. Помітьте на початку знаком "+" ті, які допускаються у Python, і знаком "-" які неприпустимі.
Apples
count
counT
Jane Doe
John_Doe
Python_Starter-2018
room42
room#42
room_42
call(097_123_45_67)
price_$5
keywords_of_python_3.5
__currency__rate
_
1st_class
Кількість_користувачів_з_прізвищем_Непийпиво
ім'я_користувача
Завдання 2
Відповідь надати у текстовому файлі у кодуванні UTF-8.
Створіть дві змінні з іменами «перше число» і «друге число» англійською мовою використовуючи snake_case. Запишіть у першу змінну число 20, у другу — -100.