Type Casting (приведення типів) – це процес перетворення значення з одного типу даних в інший. У Python це стає в нагоді при роботі з введенням користувача, виконанні обчислень, обробці даних з файлів чи API (наприклад користувач ввів рядок, і нам потрібно використовувати його як число). Python підтримує два види приведення типів – неявне (implicit) та явне (explicit).
Неявне приведення типів
Python при потребі автоматично перетворює один тип у інший, коли це безпечно і логічно. Наприклад у обчисленнях int та float, результат буде float:
a = 10 # int
b = 3.5 # float
result = a + b
print(result) # 13.5
print(type(result)) # <class 'float'>Тут Python неявно перетворив int до float, щоб уникнути втрати точності. При цьому Python не виконує автоматичне перетворення між несумісними типами даних. Наприклад, рядок не буде автоматично приведено до будь-якого числового типу.
Явне приведення типів
У такому випадку ви самостійно робите виклик функцій для перетворення значень з одного типу в інший:
- int() – у ціле число
- float() – у число з рухомою комою
- str() – у рядок
- bool() – у булевий тип
Розглянемо деякі приклади явного приведення типів.
Перетворення рядка в число:
age_str = '25'
age = int(age_str)
print(age + 5) # 30Якщо не привести age_str до int, виникне помилка під час додавання:
TypeError: can only concatenate str (not "int") to strПеретворення числа в рядок:
numbers = [1, 2, 3, 4]
joined = ', '.join(str(n) for n in numbers)
print(joined) # 1, 2, 3, 4Перетворення цілого числа у число з рухомою комою:
count = 7
result = float(count)
print(result) # 7.0Перетворення числа з рухомою комою у ціле число:
number = 99.9
number = int(number)
print(number) # 99Перетворення у boolean тип:
print(bool(0)) # False
print(bool(5)) # True
print(bool('')) # False
print(bool('Hi')) # TrueФункція bool() перетворює значення на True або False. У Python порожні контейнери (списки, кортежі, словники, множини, тощо), нуль (для числових типів), порожній рядок та None – інтерпретуються як False, інші значення як True.
Потенційні помилки під час приведення типів
Не всі перетворення є можливими. Наприклад спроба перетворити рядок який не представляє число, за допомогою функції int() або float(), призведе до помилки ValueError:
number = int('abc')
# ValueError: invalid literal for int() with base 10: 'abc'Для уникнення таких винятків варто попередньо перевіряти дані, або обробляти їх за допомогою try/except:
value = '123abc'
try:
number = int(value)
except ValueError:
print('Cannot convert to int')Важливі моменти
- Приведення типів може призвести до втрати даних (наприклад при перетворенні числа з рухомою комою у ціле число, дробова частина відкидається).
- Не всі перетворення є можливими. Спроба перетворити рядок який не представляє число, за допомогою функцій int() або float(), призведе до помилки ValueError.
- Явне приведення типів підвищує читабельність і ясність коду, оскільки явно демонструє намір змінити тип даних.