2.2. Змінні та базові типи¶
Змінна — це ім’я, яке ви прив’язуєте до значення за допомогою оператора =. Після присвоювання ім’я можна використовувати скрізь, де можна використовувати значення:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
Спочатку обчислюється права частина =, потім результат прив’язується до імені ліворуч. Читання імені, яке ніколи не було присвоєно, викликає NameError.
Змінна — це просто мітка. Вона вказує на значення – значення знаходиться десь в іншому місці, і одне значення може мати будь-яку кількість міток.
Змінні — це мітки, що вказують на значення. Перепризначення змінної переміщує мітку; воно не змінює значення, на яке вказувала мітка раніше.¶
2.2.1. Правила іменування¶
Імена починаються з літери або підкреслення і можуть містити літери, цифри та підкреслення.
frame_countта_internalдопустимі;1st_frameє синтаксичною помилкою.Імена чутливі до регістру:
Widthтаwidth— це дві різні змінні.Уникайте повторного використання вбудованих імен, як-от
list,str,id()абоprint()– їх затінення не викликає помилки, але оригінальне вбудоване стає недосяжним для решти скрипту.Конвенція:
snake_caseдля змінних і функцій,ALL_CAPSдля констант, які не планується змінювати,CamelCaseдля імен класів.
2.2.2. Базові типи¶
Кожне значення у Python має тип, який визначає, які операції воно підтримує. Чотири типи, які ви будете використовувати найчастіше:
int – цілі числа, додатні або від’ємні. Цілі числа MicroPython зростають настільки, наскільки дозволяє пам’ять. Літерали записуються як прості цифри:
0,42,-7. Шістнадцяткові (0x1A), вісімкові (0o17) та двійкові (0b1010) літерали також допустимі та корисні для регістрів і бітових масок.float – числа з десятковою точкою або показником степеня:
3.14,1.0,-0.5,2e6(= 2 000 000,0). Усі числа з плаваючою точкою на камері відповідають стандарту IEEE 754 32-біт – точність до приблизно семи значущих цифр.bool – одне з двох літеральних значень
TrueабоFalse(зверніть увагу на написання з великої літери).str – текст, записаний у вигляді символів між одинарними або подвійними лапками:
"hello",'OpenMV'. Обидва стилі лапок рівнозначні; вибирайте той, який дозволяє уникнути екранування символів лапок усередині рядка.
Є також п’яте значення, яке варто знати одразу:
None – єдине значення типу
NoneType. Використовується для позначення «немає значення» або «ще не встановлено». Функції, що не повертають значення явно, неявно повертаютьNone.
2.2.3. Перевірка та перетворення типів¶
Вбудована функція type() повертає тип будь-якого значення:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Кожен тип також виступає функцією перетворення. Передайте йому значення іншого типу, і ви отримаєте еквівалентне значення нового типу – якщо перетворення визначено:
>>> int("42")
42
>>> int(3.9)
3 # truncates toward zero, not rounds
>>> float("1.5")
1.5
>>> str(255)
'255'
>>> bool(0), bool(1), bool("")
(False, True, False)
Перетворення, які не є добре визначеними, викликають ValueError:
>>> int("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10
2.2.4. Перепризначення та динамічна типізація¶
Ім’я може бути перепризначене значенню будь-якого типу в будь-який момент. Наступне є допустимим:
x = 42
x = "now I'm a string"
x = 3.14
Python не прив’язує змінну до типу. Код, що залежить від того, що x є цілим числом, просто очікує ціле число в тій точці, де воно використовується; якщо отримує щось інше, виникає TypeError під час виконання.
Примітка
Перепризначення x не змінює значення, на яке вказувало старе прив’язування. Якщо два імені вказують на одне й те саме значення, перепризначення одного не впливає на інше:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Мутація спільного значення відрізняється: метод, як-от list.append, змінює значення, на яке вказує прив’язування, тому кожне інше ім’я, що вказує на те саме значення, бачить цю зміну.