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.
  • Явне приведення типів підвищує читабельність і ясність коду, оскільки явно демонструє намір змінити тип даних.

Мітки: