article banner

Змінні на Python

Це фрагмент книги Python з нуля, яка допоможе вам навчитися програмуванню з нуля. Ви можете знайти його на Allegro, Empik та в інтернет-книгарнях.

Ми вже дізналися про кілька типів значень і операції, які можна між ними виконувати. Тобі може бути цікаво, для чого вони потрібні. Навіщо писати "Привіт, " + "Михайле", якщо можна було б одразу написати "Привіт, Михайле"? Це пов’язано з тим, що зазвичай різні частини походять з різних місць. Наприклад, привітання може виглядати так: "Привіт, " + user_name, де user_name вказуватиме на ім’я, яке користувач увів в іншому місці. Тут user_name буде змінною. Що це означає? Дізнаємося у цьому розділі.

Визначення змінних

Щоб створити змінну в Python, достатньо задати їй ім’я, використати символ присвоєння = (одинарний знак дорівнює) і праворуч від нього вказати значення цієї змінної.

a = 10
print(a)  # 10
b = "Привіт"
print(a)  # 10
print(b)  # Привіт

Символ присвоєння змінної = має мало спільного з оператором порівняння ==, який ми розглядали раніше. Їх не варто плутати. == порівнює два значення та повертає True або False. = присвоює значення змінній.

Зміна значення змінної відбувається так само, як і присвоєння.

x = 1
print(x)  # 1
x = 2
print(x)  # 2

Вправа: Визначення змінних 1

Заповни пропущені фрагменти:

name = _______
print(name)  # Міхал
name = "Марцін"
print(name)  # _______
points = _______
print(points)  # 123

Відповіді в кінці книги.

Вправа: Визначення змінних 2

Визнач змінну з назвою num і надай їй значення 10. Виведи це значення за допомогою функції print. Потім надай змінній num значення 20 і знову виведи це значення.

Відповіді в кінці книги.

Називання змінних

При називанні змінних можна використовувати великі та малі літери, цифри та символ підкреслення _. Назва змінної не може починатися з цифри.

Існують різні системи називання змінних, але доброю практикою вважається snake_case, згідно з якою назви пишуться малими літерами, а слова розділяються символом підкреслення _. Якщо ми маємо кілька змінних зі схожими значеннями, у кінці додаємо цифру (наприклад, name1, name2).

У програмуванні використовуються назви англійською мовою. Дуже рідко робляться винятки для власних назв. Використання польських слів або слів іншою мовою в назвах змінних може бути прийнятним на курсах для початківців, але в комерційних проєктах це вважається непрофесійним.

Коли ми називаємо змінну, рекомендую спершу:

  • Подумати, на що вона буде вказувати (припустімо, нам потрібна змінна, яка міститиме адреси фотографій користувачів).
  • Назвати її якомога коротше англійською мовою (у нашому прикладі це може бути "user image url").
  • Записати це в нотації snake_case (у нашому прикладі це буде "user_image_url").

Ось кілька прикладів правильно названих змінних:

  • user_name
  • is_tea_time
  • user_group_key
  • user1, user2

Ось кілька прикладів змінних з ненайкращими назвами:

  • bookscollection — так неправильно, оскільки collection — це окреме слово, яке має відділятися знаком підкреслення _ або починатися з великої літери (краща версія books_collection);
  • 1book — неправильно, оскільки число не може стояти на першому місці (краща версія one_book);
  • lista_książek — неправильно, тому що змінні слід називати англійською мовою (кращий варіант book_list або books).

У наступних частинах книги Ти побачиш ще багато прикладів правильно названих змінних. Зверни на них увагу.

Вправа: Називання змінних

Як думаєш, які з наведених нижче змінних названі вдало?

  • public_workshops
  • 1_way_ticket
  • arbitrary_user
  • note_type
  • user_Maciek
  • post_user_request
  • szkolenie_warszawa

Відповіді в кінці книги.

Надання значень, які розширюють змінну

У програмуванні часто трапляється так, що замість того, щоб повністю змінювати значення змінної, нам потрібно просто щось до нього додати або відняти. Наприклад, ми можемо дописувати нові продукти до списку покупок або додати нове значення до загальної суми.

Щоб додати щось до наявної змінної, достатньо встановити для неї нове значення як суму поточного значення та значення, яке Ти хочеш додати.

cart_list = ""

cart_list = cart_list + "Полуниця, "
# "" + "Полуниця, " дає "Полуниця, "
print(cart_list)  # "Полуниця, "

cart_list = cart_list + "Груша, "
# "Полуниця, " + "Груша, "
# дає "Полуниця, Груша, "
print(cart_list)  # "Полуниця, Груша, "

cart_list = cart_list + "Томат"
# "Полуниця, Груша, " + "Томат" дає
# "Полуниця, Груша, Томат"
print(cart_list)  # "Полуниця, Груша, Томат"

num = 0

num = num + 1  # 0 + 1 дає 1
print(num)  # 1

num = num + 2  # 1 + 2 дає 3
print(num)  # 3

num = num + 3  # 3 + 3 дає 6
print(num)  # 6

Оскільки такий спосіб зміни значень дуже популярний, було зроблено скорочений запис. Замість того, щоб писати x = x + y, можна використовувати оператор += і писати x += y.

cart_list = ""

cart_list += "Полуниця, "
# "" + "Полуниця, "
# дає "Полуниця, "
print(cart_list)  # "Полуниця, "

cart_list += "Груша, "
# "Полуниця, " + "Груша, "
# дає "Полуниця, Груша, "
print(cart_list)  # "Полуниця, Груша, "

cart_list += "Томат"
# "Полуниця, Груша, " + "Томат"
# дає "Полуниця, Груша, Томат"
print(cart_list)
# "Полуниця, Груша, Томат"
num = 0

num += 1
print(num)  # 1

num += 2
print(num)  # 3

num += 3
print(num)  # 6

Для чисел використовується також віднімання значень. Тут застосовується оператор -=. Використання х -= у є еквівалентом х = х — у.

num = 10

num -= 1
print(num)  # 9

num -= 2
print(num)  # 7

num -= 3
print(num)  # 4

Інші математичні операції також можна скорочувати таким чином. Замість x = x * y, пишемо x *= y. Замість x = x % y, пишемо x %= y і т.д.

a = 10
a *= 3
print(a)  # 30
a %= 4
print(a)  # 2

Вправа: Додавання та віднімання від значень змінних

Заповни пропущені фрагменти:

fruits = "Інжир "
price = 0

fruits __ "Груша "
price __ 3.2

print(fruits)  # Інжир Груша
print(price)  # 3.2

fruits += ________
price += ____

print(fruits)  # Інжир Груша Banan
print(price)  # 6.0

# Використовуємо купон на знижку
price __ 1.4

print(price)  # 4.6

Відповіді в кінці книги.

Змінні які вказують на значення

Змінна нагадує аркуш паперу з номером сховища, яке містить значення. Коли інтерпретатор бачить вираз "Привіт," + user_name, то хотів би по обидві сторони від плюса мати значення, натомість з однієї сторони стоїть змінна. Ця змінна містить адресу, за якою знаходиться потрібне значення. Тож інтерпретатор прямує туди та знаходить потрібне ім’я користувача. Ось чому я кажу, що змінні не містять значень, а вказують на них.

Припустімо, коли ми запитуємо значення user_name, змінна вказує на "Міхал". Коли ми налаштуємо її так, щоб вона вказувала на "Марцін", попереднє значення забувається. Коли ми запитуватимемо значення user_name, ми отримуватимемо значення, на яке змінна вказує зараз, тобто "Марцін".

user_name = "Міхал"
print(user_name)  # Міхал

user_name = "Марцін"
print(user_name)  # Марцін

Ця тонка метафора допомагає з більш складним використанням змінних. Що робити в ситуації, коли ми присвоїмо змінній значення іншої змінної? Варто пам’ятати, що змінні вказують на значення, а не на інші змінні. Наступна проблема часто вводить в оману навіть досвідчених розробників, що інколи призводить до серйозних помилок у застосунках. Однак все стане зрозумілішим, коли ми зрозуміємо метафору вказування на значення, яка чітко демонструє, як насправді працюють змінні.

a = 10
b = a
a = 20
print(b)  # 10,
# оскільки b вказує на значення 10, а не на змінну
print(a)  # 20

Представлена тут картина дещо ускладниться, коли ми введемо мутації значень. Про це йтиметься пізніше.

f-стрінги

Часто буває так, що ми хочемо вставити значення змінної в текстове значення. Якщо змінна також містить значення типу стрінг, такі значення можна додати за допомогою плюса.

name = "Алла"
print("Ім’я — це " + name)  # Ім’я — це Алла

Однак якщо змінна містить значення іншого типу, наприклад int, то перед додаванням необхідно змінити значення на рядок. Ми можемо зробити це за допомогою str, як у прикладі нижче.

value = 1234
print("Значення — це " + str(value))  
# Значення — це 1234

Втім є простіший спосіб. Оскільки змінні надзвичайно часто мають текстове значення, для рядків було створено спеціальний запис (його було введено у версії 3.6). Він характеризується тим, що перед лапками, від яких починається рядок, ми ставимо літеру "f". Коли ми так зробимо, ми можемо помістити в текстове значення назву змінної у фігурних дужках, а на її місці буде розміщене значення цієї змінної, перетворене на рядок.

value = 1234
print(f"Значення — це {value}")  
# Значення — це 1234

Текстові значення, записані таким чином, відомі як f-рядки. Це дуже популярний запис, який ми ще багато разів побачимо в цій книзі.

a = "A"
b = "B"
print(f"a = {a}, b = {b}")  # a = A, b = B

Присвоєння значень кільком змінним

У Python можна присвоювати значення багатьом змінним одночасно. Наприклад, якщо ми хочемо, щоб і a, і b були рівними 1, ми можемо зробити це за допомогою двох присвоєнь, або за допомогою a = b = 1.

a = b = 1
print(a)  # 1
print(b)  # 1

# альтернатива до
a = 1
b = 1
print(a)  # 1
print(b)  # 1

Якщо ми хочемо надати різні значення для a і b, це також можна зробити одним рядком. У цьому випадку ми спочатку визначаємо змінні, яким хочемо присвоїти значення (розділяємо їх комами), ставимо дорівнює та визначаємо їх значення одне за одним.

a, b = 1, 2
print(a)  # 1
print(b)  # 2

# альтернатива до
a = 1
b = 2
print(a)  # 1
print(b)  # 2

Одним із способів використання такого запису є заміна значень таким чином, щоб a отримала значення b, а b — значення a.

a, b = 1, 2
print(a)  # 1
print(b)  # 2

a, b = b, a
print(a)  # 2
print(b)  # 1

Особливе значення None

Є особливе значення None, яке означає відсутність значення. Воно часто встановлюється як значення щойно створеної змінної, коли ми хочемо створити змінну, але ще не маємо жодного її значення. None використовується також, щоб позбутися значення змінної. Далі в книзі ми побачимо деякі практичні приклади щодо цього.

name = None
print(name)  # None

name = "Марцін"
print(name)  # Марцін

name = None
print(name)  # None

Увага! У програмуванні регістр (розмір літер) дуже важливий. Зауваж, що None починається з великої літери. Завжди звертай увагу на регістр у своєму коді.

Щоб перевірити, чи змінна має значення None, зазвичай використовується is None замість == None.

name = None
print(name is None)  # True

name = "Марцін"
print(name is None)  # False

name = None
print(name is None)  # True

Ключове слово is перевіряє, чи з обох сторін є той самий об’єкт, тому не використовується метод __eq__, який ми розглянемо в цій книзі пізніше.

Вправа: None

Заповни пропущені фрагменти:

name = ____
surname = "Міхальський"

print(name is None)  # ____
print(name)  # None
print(surname)  # Міхальський

name = surname
surname = "Ґайос"

print(name is None)  # ____
print(name)  # ______
print(surname)  # ________

Відповіді в кінці книги.