Перейти до змісту

Змінні


📌 Визначення


  • Змінна — це ім’я (name), яке посилається на об’єкт у пам’яті; тип об’єкта визначається під час виконання, отже Python має динамічну типізацію — ім’я можна переприв’язати до будь-якого об’єкта будь-коли.
  • Оголошення не потрібне: ім’я з’являється при першому присвоєнні.
x = 42          # int
x = "привіт"    # тепер x посилається на str

Змінні — це лише ярлики на об’єкти.


📌 Присвоєння


  • x = 10 одне ім’я ← один об’єкт
  • x = y = z = 0 ланцюгове присвоєння усім одже значення 0
  • a, b = 1, 2 розпакування кортежу
  • a, b = b, a “python-style” обмін значень без тимчасової змінної

Під капотом

  • присвоєння просто створює новий зв’язок «ім’я → об’єкт»;
  • попередній об’єкт звільняється, коли на нього більше немає посилань (лічильник посилань + збірник сміття).

Оператор del * del x видаляє зв’язок імені з об’єктом із поточної області видимості; * якщо посилань не лишилось — об’єкт звільняється


📌 Правила іменування (синтаксис)


  1. Починається з букви або _.
  2. Далі — букви, цифри, підкреслення.
  3. Чутливість до регістру: age, Age, AGE — різні імена.
  4. Не можна використовувати зарезервовані ключові слова (for, type, print, …).

📌 Стиль PEP 8 (конвенції)


Елемент Рекомендація Приклади Змінні / функції snake_case, коротко, виразно total_price, user_id Константи (модульні) UPPER_CASE_WITH_UNDERSCORES MAX_RETRIES = 5 Уникати односимвольних l, O, I; вони схожі на 1 і 0

“Приватні” атрибути _leading_underscore Сильне “приватне” (name-mangling) __double_leading (už для запобігання конфліктам у підкласах)
PEP 8 дозволяє mixedCase тільки там, де це вже історично склалось.


📌 Області видимості та LEGB


Python шукає ім’я у такому порядку:

Local → Enclosing (вкладені функції) → Global (модуль) → Built-in.

  • global x - оголошує, що всередині функції ми звертаємось до змінної x з модуля, а не створюємо локальну
    • якщо в глобальній області немає такї, то вона створюється
  • nonlocal x - дає доступ до змінної з найближчої зовнішньої функції, дозволяє змінювати її
count = 0        # global

def outer():
    total = 0    # enclosing
    def inner():
        nonlocal total
        total += 1

📌 Типи змінних (вбудовані об’єкти)


  • Числа: int, float, complex
  • Булеві: bool (True, False)
  • Послідовності: str, list, tuple, range
  • Мапи та множини: dict, set, frozenset
  • Спеціальні: bytes, bytearray, memoryview, NoneType

    Python автоматично визначає тип за значенням; змінна може змінити тип у ході роботи програми. Великих чисел допускає розділювач '_' для читабельності: tokens_per_sec = 1_000_000


📌 Ідентичність, рівність та id()


  • Ідентичність a is b чи посилаються обидва імені на той самий об’єкт
  • Рівність a == b чи рівні значення (визначає метод __eq__)
  • id(obj) id(a) «адреса» об’єкта (гарантовано унікальна, поки об’єкт існує)
a = [1, 2]
b = a
c = [1, 2]

a is b   # True
a == c   # True, але
a is c   # False

📌 Поради та хитрощі


  • swap: x, y = y, x — швидкий обмін без тимчасової змінної.
  • unused variables: використовуйте _ або _unused як ім’я-заглушку.
  • аnnotations: age: int = 18 — лише підказка, тип все ще не фіксується.
  • іn-place оператори (+=, -=, …) можуть працювати швидше на mutable-об’єктах, бо намагаються змінити існуючий об’єкт.
  • Для великих програм дотримуйтесь PEP 8, щоб код лишався читабельним та однорідним.